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

求一条SQL语句:比较复杂的3表查询并更新到另外一个表中!
表A
user   usermoney   userzone   useraddress   userviocemoney  

表B
user   usermoney   userzone     cardnum
张     100                 北京             1000005
王     100                 郑州             2000005
张     100                 北京             1000006
王     100                 郑州             2000006

表C
user   useraddress   userviocemoney
张       西直门               30
张       西直门               40
张       西直门               30
王       人民路               10
王       人民路               20
王       人民路               30

我要的结果应该如下:
表A
user   usermoney   userzone   useraddress   userviocemoney  
张         100               北京         西直门               100(30+40+30)
王         100               郑州         人民路               60   (10+20+30)


------解决方案--------------------
insert into A
select t1.*,t2.useraddress,t2.userviocemoney from
(select distinct user,usermoney,userzone from b) t1,
(select user,useraddress,sum(userviocemoney) userviocemoney from c group by user,useraddress) t2
where t1.user = t2.user

------解决方案--------------------
insert A
select D.user,E.usermoney,E.userzone,D.useraddress,D.userviocemoney from
(
select distinct user,usermoney,userzone from B
)E,
(
select user,useraddress,userviocemoney=sum(userviocemoney)from C group by user,useraddress
)D
where E.user = D.user
------解决方案--------------------
create table A([user] varchar(10),usermoney int,userzone varchar(10),useraddress varchar(10),userviocemoney int)
create table B([user] varchar(10),usermoney int,userzone varchar(10),cardnum varchar(10))
insert into B values( '张 ', 100, '北京 ', '1000005 ')
insert into B values( '王 ', 100, '郑州 ', '2000005 ')
insert into B values( '张 ', 100, '北京 ', '1000006 ')
insert into B values( '王 ', 100, '郑州 ', '2000006 ')
create table C([user] varchar(10),useraddress varchar(10),userviocemoney int)
insert into C values( '张 ', '西直门 ', 30)
insert into C values( '张 ', '西直门 ', 40)
insert into C values( '张 ', '西直门 ', 30)
insert into C values( '王 ', '人民路 ', 10)
insert into C values( '王 ', '人民路 ', 20)
insert into C values( '王 ', '人民路 ', 30)
go

insert into A
select t1.*,t2.useraddres