数据库表: a 
列名 :  省份   prov    产品   prod    日期   time    订购量   ord省份      产品       日期      订购量
湖北      笔记本     20091110    30
湖北      书         20091110    30
安徽      笔记本     20091110    20
北京      笔记本     20091110    10
湖北      笔记本     20091111    40
安徽      书         20091111    50
安徽      笔记本     20091111    30
北京      笔记本     20091111    20想要的查询结果:
省份      产品      20091110     20091111
湖北      笔记本       30          40
湖北      书           30          
安徽      笔记本       20          30
安徽      书                       50
北京      笔记本       10          20希望高手帮我解答下

解决方案 »

  1.   

    补充,日期是不固定的 也就是说可能是2天 可能是一年 千万不要写固定列的sql或者过程
      

  2.   

    select prov,prod,
    sum(case when time='20091110' then ord  else 0 end),
    sum(case when time='20091111' then ord  else 0 end)
    ...
    from tab1
    group by prov,prod
      

  3.   

    日期如何不固定的话,那就先抓日期!用动态的SQL来取值!
      

  4.   


    create or replace procedure tmp_pro(mycursor out  sys_refcursor) is
    m_sql  varchar2(4000);
    m_sql1 varchar2(4000);
    c sys_refcursor;
    temp varchar2(10);
    begin
    m_sql:=' select distinct * from( select prov,prod, ';
    OPEN c for
    select distinct time from a;
    loop
    fetch c into temp;
    EXIT WHEN (c%NOTFOUND);
    m_sql1:=m_sql1||',sum(case when time='''||temp||''' then ord else 0 end) "'||temp||'" ';
    END LOOP;
    m_sql1:=LTRIM(m_sql1,',');
    m_sql:=m_sql||m_sql1||' from a group by prov,prod) A ';
    open mycursor for
    m_sql;
    end tmp_pro;
      

  5.   

    select prov 省份,prod 产品,sum(decode(time,'20091110',ord,null)) "20091110",sum(decode(time,'20091111',ord,null)) "20091111" 
    from A group by prov,prod order by 1,2;
      

  6.   

    m_sql1:=LTRIM(m_sql1,',');   是什么意思?