请教一SQL语句:表结构:
日期               类型       数量
2013-06-04      1          20
2013-06-04      2          10
2013-06-03      1          60
2013-06-03      1          20
2013-06-03      2          10
2013-06-03      3          10
类型只有:1、2、3,现在想查出每天3种类型的总数量,即为:
日期            类型1    类型2   类型3
2013-06-04   20       10       0
2013-06-03   80       10       10
这种形式,一个语句可以查出来吗?SQL

解决方案 »

  1.   

    像这类问题,就算能查出来。sun公司也不建议使用,因为,这不是好的编程习惯。建议你结合java来实现,就是把汇总的工作交给服务器语言来做,用多条语句。
      

  2.   

    额这个很简单,就是行转列,看我的代码
    SCOTT@xp-ora10g> create table t1("日期" date,"类型" number,"数量" number);Table created.
    SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-04'),1,20);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-04'),2,10);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),1,60);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),1,20);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),2,10);1 row created.SCOTT@xp-ora10g> insert into t1 values(to_date('2013-06-03'),3,10);1 row created.SCOTT@xp-ora10g> select * from t1;日期             类型       数量
    ---------- ---------- ----------
    2013-06-04          1         20
    2013-06-04          2         10
    2013-06-03          1         60
    2013-06-03          1         20
    2013-06-03          2         10
    2013-06-03          3         106 rows selected.
    SCOTT@xp-ora10g> select 日期,sum(case when 类型=1 then 数量 else 0 end) "类型1",sum(case when 类型=2 then 数量 else 0end
    ) "类型2",sum(case when 类型=3 then 数量 else 0 end) "类型3" from t1 group by 日期;日期            类型1      类型2      类型3
    ---------- ---------- ---------- ----------
    2013-06-04         20         10          0
    2013-06-03         80         10         10就样就可以了,行转列运用的还是比较广的
      

  3.   

    这个肯定用11g的新特性pivot了。 create table t1("日期" date,"类型" number,"数量" number);
     select * from t1 pivot(sum(数量) for 类型 in(1 类型1, 2 类型2, 3 类型3));
      

  4.   


    select 日期,
           sum(decode(类型,1,数量,0))  "类型1" ,
           sum(decode(类型,2,数量,0))  "类型2" ,
           sum(decode(类型,3,数量,0))  "类型3" 
    from tb1
    group by 日期
    order by 日期
      

  5.   


    select a.com_data1, 
           sum( case when 
                a.com_name=1
                then a.com_count
                else 0
                end
            )"类型1",
            sum(case when
                a.com_name=2
                then a.com_count
                else 0
                end
                )"类型2",
                sum(case when 
                    a.com_name=3
                    then a.com_count
                    else 0
                    end
                    )"类型3"
           from aaa  a group by a.com_data1
           order by a.com_data1 desc