日期:2014-05-17  浏览次数:20523 次

多表组合查询给一些建议
数据库里有很多张表 都是记录的用户每月发生的费用,每个月一张表,例如m201205,m201204。。。等等,每个表有50万左右的记录,都存在用户id和发生费用字段,因为不断有新用户加入,老用户离去,所以每张表的用户id并不都一样多
现在用户提交上来1000个用户id,想得到2012年1月-5月的这些用户所发生的费用,怎么写效率最高?
如果某个月没有这个用户id的数据,那么就显示为0

用户希望得到的结果是这样

用户id 1月 2月 3月 4月 5月
 1 50.5 43.4 33.3 0 0  
 2 0 20.4 13.3 14.4 45.5
 3 22.3 33.4 63.3 14.4 23.5
 4 45.5 43.4 33.3 34.4 85.5



------解决方案--------------------
Select 用户id, Sum(A) As 1月, Sum(B) As 2月, Sum(C) As 3月, Sum(C) As 3月,
Sum(D) As 4月, Sum(E) As 5月
From (Select 用户id, Case When 月份='1月' Then 发生费用 Else 0 End As A, 
Case When 月份='2月' Then 发生费用 Else 0 End As B,
Case When 月份='3月' Then 发生费用 Else 0 End As C,
Case When 月份='4月' Then 发生费用 Else 0 End As D,
Case When 月份='5月' Then 发生费用 Else 0 End As E
From 表) T
Order By 用户id