Num 日期 区分 金额
1 2006/10/30 0 20
2 2006/10/30 0 20
3 2006/10/30 1 30
4 2006/10/30 1 40
5 2006/10/30 1 20
6 2006/10/31 0 20
7 2006/10/31 0 20
8 2006/10/31 0 30
9 2006/10/31 1 10
10 2006/10/31 1 30
11 2006/10/31 1 20
12 2006/10/31 1 10
主键为:Num

目标:选择DB中日期相同的数据作为一条记录,并且计算区分=0、1,金额的合计

样例:
检索结果:(括号中内容不需要显示,只是为了容易看清问题。)
日期 区分为0的金额 区分为1的金额
2006/10/30 40(20+20) 90(30+40+20)
2006/10/31 70(20+20+30) 70(10+30+20+10)
如何构造该SQL,能不能用一个SQL语句实现.

解决方案 »

  1.   

    select 
       日期,
       sum(case 区分 when 0 then 金额 else 0 end) as 区分为0的金额,
       sum(case 区分 when 1 then 金额 else 0 end) as 区分为1的金额
    from
       tablename
    group by 
       日期
      

  2.   

    非常感谢 i9988(冒牌j9988 V0.3) ! 估计应该可以。肯定给分,看看还有没有别的方法。顺便问一句,像case这种语句,在什么书中介绍的,以前看数据库方面的书,从来没有接触过这些,这些语句在Oracle中是否照常可行阿。
      

  3.   

    不知道除了case when
    还有什么怪招没 :)
      

  4.   

    像case这种语句,在什么书中介绍的看联机帮助
    这些语句在Oracle中是否照常可行阿
    有些可以有些不行,具体还是看oracle的帮助 :)
      

  5.   

    直接 以  [日期]  [区分] 两列分组计算 金额就可以了吧,最后 order by [日期]貌似这样就 OK 了
      

  6.   

    Oracle没有case语句,应该用decode代替select 
       日期,
       sum(decode(区分,0,金额,0)) as 区分为0的金额,
       sum(decode(区分,1,金额,0)) as 区分为1的金额
    from
       tablename
    group by 
       日期