数据库里有很多张表 都是记录的用户每月发生的费用,每个月一张表,例如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

解决方案 »

  1.   

    用union把表合并.然后再行列转换,聚合一下就得到结果.
      

  2.   

    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