如果type的个数固定的话,或者由数量范围的话可以做到
select value_date  ,sum(decode(typeid,1,value,0)) 'X',sum(decode(typeid,2,value,0)) 'Y',
sum(decode(typeid,3,value,0)) 'Z',sum(decode(typeid,4,value,0)) 'P'
from a group by (value_date);

解决方案 »

  1.   

    列是动态的,不确定的,所以 bzszp的方法不可行sql server中现在都有transform专门用来做交叉表,
    oracle中就没有吗?
      

  2.   

    而且,bzszp,请注意统计报表的结果,要是这段时期内每天都有一条记录,
    如果这一天没有值的话,就应该是0你的查询语句只会列出发生过value的日期
      

  3.   

    查询出一段时期每一天的语句是:select to_char(to_date('2000-01-01','yyyy-mm-dd')+(rownum-1),'yyyy-mm-dd') 日期 from user_objects where rownum<367 and to_date('2000-01-01','yyyy-mm-dd')+(rownum-1)<to_date('2001-01-01','yyyy-mm-dd');