select 
b.userName,
sum(case when a.type=1 then a.type else 0 end) type1,
sum(case when a.type=2 then a.type else 0 end) type2,
sum(case when a.type=3 then a.type else 0 end) type3
from typeTable a
left join userTable b on a.userid=b.userid
试试这个

解决方案 »

  1.   

    错了你是要money是吧
    select 
    b.userName,
    sum(case when a.type=1 then a.money else 0 end) type1,
    sum(case when a.type=2 then a.money else 0 end) type2,
    sum(case when a.type=3 then a.money else 0 end) type3
    from typeTable a
    left join userTable b on a.userid=b.userid
      

  2.   

    典型的行列转换, 有写数据库提供直接的转换函数。不过 case when 比较通用一点
    select 
    userId,
    sum(case when 'type' = 1 then money else 0 end) as type1,
    sum(case when 'type' = 2 then money else 0 end) as type2,
    sum(case when 'type' = 3 then money else 0 end) as type3
    from tab group by userId;你试试
      

  3.   

    提供思路:
    1、你这种需求必须要以user表为中心。
    2、left join (这里放每个usertype表的查询,安装用户的userid进行分组。这里必须就要带出type1、type2、type3出来,通过case when 来解决这个问题)
      

  4.   

    谢谢,你这个使用是没问题的。但是不管后边加不加条件,他都是全部显示,就是我想判断哪个用户的时候他其他为NULL,我想把用户名列值为NULL的行直接不显示
    我的SQL语句是SELECT b.id,b.money,b.loginname,round(sum(case when e.type='cz' then e.money else 0 end),2) cz,round(sum(case when e.type='tx' then e.money else 0 end),2) tx,round(sum(case when e.type='pj' then e.money else 0 end),2) pj,round(sum(case when e.type='fd' then e.money else 0 end),2) fd,round(sum(case when e.type='tz' then e.money else 0 end),2) tz FROM emep_account e left join emep_user b on e.parentid=55 and e.userid=b.id group by e.userid

    现在的结果是这样
    id  money  loginname  cz  tx  pj  fd  tz
    NULL  NULL  NULL  0.00  0.00  0.00  0.00  20.00
    NULL  NULL  NULL  100.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  10200.00  100.00  0.00  0.00  0.00
    58  204.262  4444  100.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  1000.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  100.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  10000.00  0.00  0.00  0.00  0.00
      

  5.   

    谢谢,你这个使用是没问题的。但是不管后边加不加条件,他都是全部显示,就是我想判断哪个用户的时候他其他为NULL,我想把用户名列值为NULL的行直接不显示
    我的SQL语句是SELECT b.id,b.money,b.loginname,round(sum(case when e.type='cz' then e.money else 0 end),2) cz,round(sum(case when e.type='tx' then e.money else 0 end),2) tx,round(sum(case when e.type='pj' then e.money else 0 end),2) pj,round(sum(case when e.type='fd' then e.money else 0 end),2) fd,round(sum(case when e.type='tz' then e.money else 0 end),2) tz FROM emep_account e left join emep_user b on e.parentid=55 and e.userid=b.id group by e.userid

    现在的结果是这样
    id  money  loginname  cz  tx  pj  fd  tz
    NULL  NULL  NULL  0.00  0.00  0.00  0.00  20.00
    NULL  NULL  NULL  100.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  10200.00  100.00  0.00  0.00  0.00
    58  204.262  4444  100.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  1000.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  100.00  0.00  0.00  0.00  0.00
    NULL  NULL  NULL  10000.00  0.00  0.00  0.00  0.00
    搞定了把做外连接的表换下,判断左边的。