日期:2014-05-18  浏览次数:20395 次

sql 汇总的问题向高手请教
有两张表,表一根据表二的内容进行汇总求和,如果在表一不存在的记录添加进行汇总。
表一
列1 列2
A 0
B 0
C 0

表二
列1 列2 列3
A 1 2
B 11 22
C 111 222
D 100 200
E 200 300
F 300 400

汇总后表一
列1 列2
A 3
B 33
C 333
D 300
E 500
F 700
请高手帮忙了!给出一条SQL语句来实现!谢了

------解决方案--------------------
SQL code
create table 表一(列1 varchar(10), 列2 int)
insert into 表一 values('A', 0)
insert into 表一 values('B', 0)
insert into 表一 values('C', 0)
create table 表二(列1 varchar(10),列2 int,列3 int)
insert into 表二 values('A', 1   ,2)
insert into 表二 values('B', 11  ,22)
insert into 表二 values('C', 111 ,222)
insert into 表二 values('D', 100 ,200)
insert into 表二 values('E', 200 ,300)
insert into 表二 values('F', 300 ,400)
go

--查询
select m.列1 , m.列2 + m.列3 列2 from 表二 m left join 表一 n on m.列1 = n.列1
/*
列1         列2          
---------- ----------- 
A          3
B          33
C          333
D          300
E          500
F          700

(所影响的行数为 6 行)
*/

--更新:
update 表一 set 列2 = (select m.列2 + m.列3 from 表二 m where m.列1 = n.列1) from 表一 n
insert into 表一 select m.列1 , m.列2 + m.列3 列2 from 表二 m where not exists(select 1 from 表一 n where m.列1 = n.列1)

select * from 表一
/*
列1         列2          
---------- ----------- 
A          3
B          33
C          333
D          300
E          500
F          700

(所影响的行数为 6 行)
*/ 

drop table 表一 , 表二