首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一条SQL语句:比较复杂的3表查询并更新到另外一个表中!解决办法

2012-01-30 
求一条SQL语句:比较复杂的3表查询并更新到另外一个表中!表Auserusermoneyuserzoneuseraddressuserviocemon

求一条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.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]

select * from A

drop table A,B,C

/*
user usermoney userzone useraddress userviocemoney
---------- ----------- ---------- ----------- --------------
王 100 郑州 人民路 60
张 100 北京 西直门 100
(所影响的行数为 2 行)
*/
[解决办法]
select a.user,a.usermoney,a.userzone,b.useraddress,userviocemoney=sum(b.userviocemoney)
from 表B a join 表C b
on a.user=b.user
group by a.a.user,a.usermoney,a.userzone,b.useraddress
[解决办法]
insert into 表A
select a.*,b.useraddress,b.userviocemoney from
(select [user],usermoney,userzone from 表B group by [user],usermoney,userzone) a
join
(select [user],useraddress,userviocemoney=sum(userviocemoney) from 表C group by [user],useraddress) b
on a.[user]=b.[user]

热点排行
Bad Request.