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

简单联合查询,忘光光了
情况如下:
表A
用户   余额
1         100
2         100
3         59
4         60
表B
用户   预支时间   预支金额
1         8月2日         30
1         8月3日         50
3         8月2日         30
4         8月2日         30

我   现在需要显示的是  
用户   余额   预支金额之和   预支次数
1         100     80                       2
3         59       50                       1
4         60       30                       1

请问如何能高效的解决?   谢谢

------解决方案--------------------
declare @t table(用户 int,余额 int)
insert into @t
select 1,100
union all select 2,100
union all select 3,59
union all select 4,60
declare @b table(用户 int,预支时间 varchar(20),预支金额 int)
insert into @b
select 1, '8月2日 ',30
union all select 1, '8月3日 ',50
union all select 3, '8月2日 ',30
union all select 4, '8月2日 ',30


select a.*,sum(b.预支金额) 预支金额之和 ,count(b.用户) 预支次数 from @t a inner join @b b
on a.用户=b.用户
group by a.用户,a.余额,b.用户
order by a.用户

------解决方案--------------------
select a.用户,a.余额,t.预支金额之和,t.预支次数
from 表A a,(
select 用户,sum(预支金额) as 预支金额之和,count(*) as 预支次数
from 表B
group by 用户
) as t
where a.用户=t.用户
------解决方案--------------------
select T1.用户,sum(T2.预支金额) AS 预支金额之和 ,count(T2.用户) AS 预支次数 from 表A T1 inner join 表B T2
on T1.用户=T2.用户
group by T1.用户,T1.余额,T2.用户
order by T1.用户