有以视图如下:
AUDITTIME      PROBLEMTYPENAME
2001-5-22        问题1
2004-5-22        问题2
2003-5-22        问题3
2005-5-22        问题5
2005-5-22        问题2
2004-5-22        问题4
2007-5-22        问题7
2003-5-22        问题3
2009-5-22        问题4
想新建立以视图 :
AUDITTIME      问题1    问题2  问题3    问题4     问题5     问题72001-5-22       1 
2004-5-22               1
2003-5-22                       1     
2005-5-22                                         1
2005-5-22               1      
2004-5-22                                1      
2007-5-22                                                   1 
2003-5-22                       1     
2009-5-22                                1   即我想统计  每个问题在一段时间内每天发生的次数(如果可以的话再帮忙写下每个问题在一段时间内每年发生的次数)  
注:问题是动态的  也就是说视图一中的审计时间和问题都会根据视图一的创建条件不同而动态变化的
请问该SQL语句怎么写(ORACLE)?

解决方案 »

  1.   

    固定列的话,好做,可以用DECODE或者CASE WHEN
    不固定列的话,麻烦点,一般建议不要用SQL语句实现,而在前台报表实现
    比如PB和水晶报表都有交叉表可以实现
    固定列的语法
    select AUDITTIME,sum(decode(PROBLEMTYPENAME,'问题1',1,0)) 问题1,
           sum(decode(PROBLEMTYPENAME,'问题2,1,0)) 问题2,
           .
           .
           .
           sum(decode(PROBLEMTYPENAME,'问题7',1,0)) 问题7
    from   表
    group by AUDITTIME
      

  2.   

    像这个就是前台用PB的交叉表来实现
    后台就是普通的分组汇总语句
    select AUDITTIME,PROBLEMTYPENAME ,count(*)from 表
    group by AUDITTIME,PROBLEMTYPENAME
      

  3.   

    上边的语句执行结果是加以单独列显示问题个数,而我想要的是把个数显示在  时间和问题的交叉处(即行列交点) 第一列是AUDITTIME   然后后面的列分别是个问题!
      

  4.   

    我是在plsql中执行语句的   我现在想要一个完全可以实现功能的sql  语句    因为我对数据库不太熟悉!
      

  5.   

    如果问题个数不确定,也就是列不确定的话,单凭sql实现是不可能的
      

  6.   

    固定列的用SQL语句可以实现,不固定列的比较麻烦,虽然是可以实现,如果单纯只是拉数据看看,就不要费这个精力了,嫌看的不方便,可以导出成EXECL,然后用透视表来看