首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 一个表安插到另一个表里时有相同数据时数量累加,求解

2012-12-23 
SQL 一个表插入到另一个表里时有相同数据时数量累加,求解?一、废话不多说,直接看说明啦:目标表A:A01[编号]A

SQL 一个表插入到另一个表里时有相同数据时数量累加,求解?
一、废话不多说,直接看说明啦:
目标表A:
A01[编号]   A02[产品编号]   A03[数量]
-------------------------------------
1001        p01             100
1001        p02             200
1001        p03             300
...
说明:A表里A01字段是编号,都是相同的,复合主键是A01和A02。

来源表B:
B01[编号]  B02[产品编号]   B03[数量]
-------------------------------------
1001       p01             50
1001       p03             20
...
说明:结构和A表是一样的。

二、我想把B表的数据插入,准确的说是融合累加到A表里,如编号和产品编号有重复(即是一张单的),则累加数量。没有的则不处理,即最后欲得到的A表如下:

A01[编号]   A02[产品编号]   A03[数量]
-------------------------------------
1001        p01             150[+50]
1001        p02             200[没有,则不处理]
1001        p03             320[+20]
...

用存储过程如何做?

[解决办法]
存储过程你就自己写吧

--先插入数据
 INSERT INTO dbo.A
 SELECT *
 FROM B
 WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.a01=b.b01 AND a.a02=b.b02)
 
 --然后把相同的取出来汇总
 ;WITH cte (a01,a02,a03)
 AS
 (
 SELECT a01,a02 ,SUM(a03) a03
 FROM a
 GROUP BY a01,a02
 )--更新数据
 UPDATE a
 SET a03=cte.a03
 FROM a INNER JOIN cte ON  a.a01=cte.b01 AND a.a02=cte.b02

[解决办法]
update a set A03=A03+B.A03  B.A02=A.A02
FROM A JOIN B ON A.A02=B.B02

[解决办法]
update A set A.A03=a.A03+b.b03
 FROM A JOIN B ON A.A02=B.B02
晕。我只看到了累加到A数。看来我真的是菜鸟啊。。。。。一世都是菜鸟啊
[解决办法]
你比那个小版主好多了。
[解决办法]
update A set A.A03=a.A03+b.b03
 FROM A JOIN B ON A.A02=B.B02
select * from a
按我理解楼猪的要求
只是加数
[解决办法]
但是如果B有,A没有,那么就漏了数据了
[解决办法]
睡觉,明天在刷帖,今天到此为止
[解决办法]
引用:
SQL code?12update a set A03=A03+B.A03  B.A02=A.A02FROM A JOIN B ON A.A02=B.B02


这个应该是写得匆忙,写错了吧 应该是:
update A set A03=A03+B.B03   


FROM A JOIN B ON    A.A01=B.B01 and A.A02=B.B02


[解决办法]
引用:
存储过程你就自己写吧SQL code?1234567891011121314151617--先插入数据 INSERT INTO dbo.A SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.a01=b.b01 AND a.a02=b.b02)   --然后把相同的取出来汇总 ;WITH cte (a01,a……


大师,这个执行有错误哦,然后我调了一下调不了啊,要不麻烦你用数据测试一下,你这个写法我觉得比较好,但是还看得不是很明白 呵呵
[解决办法]
引用:
存储过程你就自己写吧SQL code?1234567891011121314151617--先插入数据 INSERT INTO dbo.A SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.a01=b.b01 AND a.a02=b.b02)   --然后把相同的取出来汇总 ;WITH cte (a01,a……


还有一点我写错了,抱歉~~ 就是有相同的就累加,有不同的就直接insert,这个还要考虑一下。
[解决办法]
报错?啥错?难道你的是2000?我关机了,明天看
[解决办法]
引用:
引用:存储过程你就自己写吧SQL code?1234567891011121314151617--先插入数据 INSERT INTO dbo.A SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.a01=b.b01 AND a.a02=b.b02)   --然后把相同……
我的就是考虑了累计啊
[解决办法]
你把with部分改成临时表吧,比较通用
[解决办法]
1.a,b表连接update 相同主键记录
2.将a表中不存在的记录添加进去.


[解决办法]
顶一个。。。。。。。。。。我上班了。。。。。
[解决办法]
  
  --然后把相同的取出来汇总
  SELECT a01,a02 ,a03+b03 a03 into #cte
  FROM a inner join b on a.a01=b.b01 and a.a02=b.b02
  --更新数据
  UPDATE a
  SET a03=cte.a03
  FROM a INNER JOIN #cte cte ON  a.a01=cte.b01 AND a.a02=cte.b02

  INSERT INTO dbo.A
   SELECT *
   FROM B
   WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.a01=b.b01 AND a.a02=b.b02)

热点排行