有一个表名为proctable,结构为:用户名 | 账号 | 汇入标记 |  金额  | 余额
--------------------------------------
name   | code | flag     | Amount | Balance说明:这里的汇入标记含义为如果是汇入,则标记为字符'c',汇出标记为字符'd';
我需要把汇入汇出汇总分组显示出来像下面:___________________________________________
|       |      |_____汇入____|_____汇出____|
|用户名 | 账号 | 金额 | 余额 | 金额 | 余额 |
--------------------------------------------按账号左右连接,不能对应的值响应为空。我这么写的
SELECT * FROM 
        (SELECT name as 用户名,code as 账号,amount as 金额1,balance as 余额1 FROM proctable 
               WHERE flag='c') a 
INNER JOIN 
        (SELECT name as 用户名2,code as 账号2,amount as 金额2,balance as 余额2 FROM proctable 
               WHERE flag='d') b
ON  a.账号 = b.账号2

但是结果左右两边都有大量重复记录,请问恩人这种汇总怎么写的该?磕头了!

解决方案 »

  1.   

    ssp2009,不要玩我,磕个头给你了.
      

  2.   

    select name,code,
    sum(case flag when 'c' then amount  end),
    sum(case flag when 'c' then balance  end),
    sum(case flag when 'd' then amount  end) ,
    sum(case flag when 'd' then balance  end)from tb group by name ,code
    --这样试试
      

  3.   

    SELECT * FROM 
    (SELECT name as 用户名,code as 账号,sum(amount) as 金额1,sum(balance) as 余额1 FROM proctable 
    WHERE flag='c' group by code,name) a 
    INNER JOIN 
    (SELECT name as 用户名2,code as 账号2,sum(amount) as 金额2,sum(balance) as 余额2 FROM proctable 
    WHERE flag='d' group by code,name) b
    ON a.账号 = b.账号2
      

  4.   

    我可能没说明白,并不是要SUM汇总,是个明细,也就是汇入和汇出的分组明细,比如说:
    甲的当天汇入和甲的当天汇出的明细,左边是汇入(汇入金额,汇入后余额),右边是汇出(汇出金额,汇出后余额),一天当中,甲有可能有10笔汇入,6笔汇出,这样子,把汇入和汇出分别通过flag标记检索后左右两边连接起来,为空的就是为空,而我检索出来后,应为空的地方被用重复的记录填充进去了.
      

  5.   


    select name,code,
    case flag when 'c' then amount else null end) as [汇入金额],
    case flag when 'c' then balance else null end) as [汇入余额],
    case flag when 'd' then amount else null end) as [汇出金额],
    case flag when 'd' then balance else null end) as [汇出余额],
    from tb 
      

  6.   

    呀!貌似jamespanjunwei(老潘)的是呢,无招胜有招了,兄弟我先天愚钝小时候糖精吃的多,一条语句让我写得跟坨米一样!
    作揖了,磕头了!恩人啊!恩人啊!谢谢诸位.谢谢CCTV,谢谢MSN,谢谢观众朋友们,谢谢老潘!