复杂SQL语句,怎么实现?

来源:百度知道 编辑:UC知道 时间:2024/06/02 12:05:00
我有两个表,如下:
表A:
商品编号 数量 打印点
0001 2 1
0001 1 2
0002 -1 1
0002 3 3
0003 4 3
表B:
商品编号 数量 库房编号
0001 2 1
0001 1 2
0002 2 1
0002 1 2
0003 2 3

将表A的记录与表比较,凡是表A的商品编号与表B的商品编号相同且表A的打印点与表B的库房编号相同的,则将其数量相加作为表B的数量,如果表A中有记录不符合上述条件,则将记录插入表B.以上两表操作完后结果应如下:
商品编号 数量 库房编号
0001 4 1
0001 2 2
0002 1 1
0002 3 3
0002 1 2
0003 6 3

请问要达到这样的目录,SQL语句要怎么写啊?表A是用SQL语句提出来的记录集,我已经把结果放到临时表了。

这完全是两步操作啊?一步是插入,一步是删除原来B表和A表相同的数据
不知道你临时表里是什么东西,不过帮你写一个吧,但是只一个语句够呛
事先你最好先备份一下,以防出错
--第一个select是选出
表A的商品编号与表B的商品编号相同且表A的打印点与表B的库房编号相同的,则将其数量相加作为表B的数量,第二个select是B与A不同的,继续保留:
insert into table_tmp select a.商品编号 商品编号,sum(a.数量) 数量,a.(打印点) 库房编号 from A,B where a.商品编号=b.商品编号 and a.打印点=b.库房编号 union all
select b.商品编号 b.数量,b.库房编号 from A,B where a.商品编号<>b.商品编号 and a.打印点<>b.库房编号
--然后清空表B
truncate table B;
--再然后把数据插回B中
insert into B select * from table_tmp;

是要分两步,但没那么复杂
第一步:
UPDATE 表B SET 数量=数量+a.数量 FROM 表A a,表B b WHERE a.商品编号=b.商品编号 AND a.打印点=b.库房编号
第二步:
INSERT INTO 表B (商品编号,数量,库房编号) (SELECT a.商品编号,a.数量,a.打印点 FROM 表A a,表B b WHERE NOT (a.商品编号=b.商品编号 AND a.打印点=b.库房编号))

binjly 说的对