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 A03=A03+B.B03
FROM A JOIN B ON A.A01=B.B01 and A.A02=B.B02
--然后把相同的取出来汇总
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)