34,576
社区成员
发帖
与我相关
我的任务
分享
--可以左连接LEFT JLIN 表名 条件 和 EXISTS 判断是否有符合条件的记录
--更新已有的数量和金额
update t2 set 金额=b.金额,数量=a.数量+b.数量 from t2 a,t1 b
where b.编码=a.编码 and b.名称=a.名称 and b.规格=a.规格
--插入没有的数量和金额
insert into t2 select 编码,名称,规格,金额,数量 from t1 a where not exists(select 1 from t2 where 编码=a.编码 and 名称=a.名称 and 规格=a.规格)
go
--以上可以将查询结果放到临时表,然后清空T2表 然后将临时表的数据插入到T2表
--或者分两步,先更新,然后插入没有的
--T1
DECLARE @T1 TABLE(编码 INT,名称 INT,规格 VARCHAR(10),金额 INT,数量 INT,单据号 VARCHAR(10),操作员 VARCHAR(10))
INSERT @T1 SELECT 1001 ,1, '1*1' ,10, 10 ,'0001', 'test'
INSERT @T1 SELECT 1002 ,2 , '1*1' , 10 , 10 ,'0001' , 'test'
INSERT @T1 SELECT 1003 ,3 , '1*1' , 10 , 10 , '0001' , 'test'
INSERT @T1 SELECT 1001 , 1 , '1*2' , 10 , 10 , '0001' , 'test'
INSERT @T1 SELECT 1001, 1 ,'1*3', 10 ,10 , '0001' ,'test'
--T2表
DECLARE @T2 TABLE(编码 INT,名称 INT,规格 VARCHAR(10),金额 INT,数量 INT)
INSERT @T2 SELECT 1001 ,1, '1*2' , 9 , 1
INSERT @T2 SELECT 1001 , 1 , '1*3' , 11 , 3
INSERT @T2 SELECT 1002, 2 , '1*1', 8 , 5
SELECT A.编码,A.名称,A.规格,A.金额,A.数量+ISNULL(B.数量,0) FROM @T1 A
LEFT JOIN @T2 B ON A.编码=B.编码 AND A.规格=B.规格
/*编码 名称 规格 金额
----------- ----------- ---------- ----------- -----------
1001 1 1*1 10 10
1002 2 1*1 10 15
1003 3 1*1 10 10
1001 1 1*2 10 11
1001 1 1*3 10 13
*/