我有两张表用户表
id(PK) UserName userPhone userAddress
1 zhansan1  ph2oneNo ad1ress
2 zhansan2 pho2neNo adre3ss
3 zhansan3 phon3eNo ad3ress
4 zhansan4 pheoneNo adre2ss
5 zhansan51 phon1eNo adres3s记录表
id(pk)  userId(fk) money type tiem datail1 1 1000.00 收入 2011-03-23 15:35:54.403 ....
2 1 1000.00 收入 2011-03-23 15:35:54.403 ....
3 1 200.00 支出 2011-03-23 15:35:54.403 ....
4 1 800.00 记账 2011-03-23 15:35:54.403 ....
5 2 1000.00 收入 2011-03-23 15:35:54.403 ....
6 3 1000.00 收入 2011-03-23 15:35:54.403 ....
7 4 1234.00 记账 2011-03-23 15:35:54.403 ....
8 1 1000.00 收入 2011-03-23 15:35:54.403 ....
怎么写sql 才能查出来以下这样的效果呢userId(或者userName) 总支出 总收入 总记账
xxxx                 xxx    xxx    xxx
xxxx                 xxx    xxx    xxx
xxxx                 xxx    xxx    xxx
xxxx                 xxx    xxx    xxxSQL高手们帮我看看谢谢啦

解决方案 »

  1.   

    select m.userId, m.userName , 
           sum(case type when '支出' then money else 0 end) [总支出],
           sum(case type when '收入' then money else 0 end) [总收入],
           sum(case type when '记账' then money else 0 end) [总记账]
    from 用户表 m , 记录表 n
    where m.id = n.userId
    group by m.userId, m.userName
      

  2.   


    --如果不匹配的记录不显示
    select m.userId, m.userName , 
           sum(case type when '支出' then money else 0 end) [总支出],
           sum(case type when '收入' then money else 0 end) [总收入],
           sum(case type when '记账' then money else 0 end) [总记账]
    from 用户表 m , 记录表 n
    where m.id = n.userId
    group by m.userId, m.userName--如果不匹配的记录显示为0
    select m.userId, m.userName , 
           sum(case type when '支出' then money else 0 end) [总支出],
           sum(case type when '收入' then money else 0 end) [总收入],
           sum(case type when '记账' then money else 0 end) [总记账]
    from 用户表 m left join 记录表 n
    on m.id = n.userId
    group by m.userId, m.userName
      

  3.   

    seelct
       b.userid,
       sum(case type when '支出' then [money] else 0 end) as 总支出,
       sum(case type when '收入' then [money] else 0 end) as 总收入,
       sum([money]) as 总记账
    from
       用户表 a, 记录表 b
    where
       a.id=b.userid
    group by
       b.userid
      

  4.   

    select
       b.userid,
       sum(case type when '支出' then [money] else 0 end) as 总支出,
       sum(case type when '收入' then [money] else 0 end) as 总收入,
       sum([money]) as 总记账
    from
       用户表 a, 记录表 b
    where
       a.id=b.userid
    group by
       b.userid
      

  5.   

    好用,,,可以讲下cese什么的么 我不大明白 谢谢了
      

  6.   


    create table #TableA
    (id int, userId int, 
    [money] float, [type] nvarchar(10), 
    tiem datetime ,datail1 nvarchar(10))
    insert #TableA select  1 ,2, 1000.00, '收入' ,'2011-03-23 15:35:54','403'union all
    select  2, 1, 1000.00 , '收入' ,'2011-03-23 15:35:54','403'union all
    select  3, 1 ,200.00 , '支出' ,'2011-03-23 15:35:54','403'union all
    select  4 ,1 ,800.00 , '记账' ,'2011-03-23 15:35:54','403'union all
    select  5 ,2 ,1000.00 , '收入' ,'2011-03-23 15:35:54','403'union all
    select  6 ,3 ,1000.00 , '收入' ,'2011-03-23 15:35:54','403'union all
    select  7 ,4, 1234.00 , '记账' ,'2011-03-23 15:35:54','403'union all
    select  8 ,1 ,1000.00 , '收入' ,'2011-03-23 15:35:54','403'select userId,
    sum(case [type] when '收入' then [money] else 0 end)as '总收入',
    sum(case [type] when '支出' then [money] else 0 end)as '总支出',
    sum(case [type] when '记账' then [money] else 0 end)as '总记账'
    from #TableA group by userId
    case分支,如:
    case [type] when '收入' then [money] else 0 end
    表示当[type]值等'收入'时,返回[money]的值,否则返回0