当前位置: 代码迷 >> Sql Server >> 根据B表的汇总结果更新A表里的数据,A.username=B.username,该如何处理
  详细解决方案

根据B表的汇总结果更新A表里的数据,A.username=B.username,该如何处理

热度:96   发布时间:2016-04-27 16:48:21.0
根据B表的汇总结果更新A表里的数据,A.username=B.username
sql语句实现:根据B表的汇总结果更新A表里的数据,A.username=B.username

如:
TableA         username是唯一的
id   username   income
1       user1         20
2       user2         20
3       user3         30
4       user4         40
5       user5         50

TableB
id   username   incomeMonth
1       user1         20
2       user1         20
3       user1         30
4       user3         40
5       user3         50
6       user3         40
7       user3         50

我想实现,
TableB根据username汇总的incomeMonth
更新到TableA里相应的income里,
两表有这样的关系
TableB.username=TableA.username




------解决方案--------------------
update a set income = b.sumInMonth
from TableA a
join (select username ,sum(incomeMonth) as sumInMonth from TableB group by username ) b on a.username = b.username
------解决方案--------------------
update TableA
set incomemonth = b.incomemonth
from tableA a,(select username , sum(incomemonth) as incomemonth from tableb group by username) b
where a.username = b.username
------解决方案--------------------
create table TableA(
id int identity(1,1),
username varchar(10),
income int
)
insert TableA
select 'user1 ',20 union all
select 'user2 ',20 union all
select 'user3 ',30 union all
select 'user4 ',40 union all
select 'user5 ',50

create table TableB(
id int identity(1,1),
username varchar(10),
incomeMonth int
)
insert TableB
select 'user1 ',20 union all
select 'user1 ',20 union all
select 'user1 ',30 union all
select 'user3 ',40 union all
select 'user3 ',50 union all
select 'user3 ',40 union all
select 'user3 ',50

我没事把表建好测试了一下,xiaoku(野蛮人(^v^)) 和dawugui(潇洒老乌龟)的都正确,
老乌龟的有个笔误 set incomemonth = b.incomemonth 应该是
set income = b.incomemonth,呵呵
------解决方案--------------------
create table TableA(id int,username varchar(10),income int)
insert TableA select 1, 'user1 ', 20
union all select 2, 'user2 ', 20
union all select 3, 'user3 ', 30
union all select 4, 'user4 ', 40
union all select 5, 'user5 ', 50

create table TableB(id int,username varchar(10),incomeMonth int)
insert TableB select 1, 'user1 ', 20
union all select 2, 'user1 ', 20
union all select 3, 'user1 ', 30
union all select 4, 'user3 ', 40
union all select 5, 'user3 ', 50
union all select 6, 'user3 ', 40
union all select 7, 'user3 ', 50
--就是不一样
update tablea
set income=isnull((select sum(incomeMonth) from tableb b where b.username=a.username),0)
FROM tablea a, tableb b
  相关解决方案