表结构如下:
    id        createDate        kpiId        kpiName        kpiValue
     1        2007-07-20          101           name1         1000
     2        2007-07-21          102           name2         2000
     3        2007-07-20          102           name2         3000
     4        2007-07-22          101           name1         4000
     .............................................................
   如上表结构,每一条记录表示的是某个kpiName的值,kpiId 和 kpiName是一一对应的。要求显示如下样式:
        时间            name1           name2      ........
     2007-07-20         1000            3000
     2007-07-21                         2000
     2007-07-22         4000    结果中的.....表示可能会有多列,这取决于库表中的kpiName字段都有多少个,如果某个kpiName在某个时间没有值的话就空着,结果按时间排序。    请高手帮一下忙,看怎么写出sql语句。
    谢谢。

解决方案 »

  1.   

    用游标循环 
    在循环里用decode()
      

  2.   

    select createdate, 
       sum(decode(kpiid,101,kpivalue,0)) name1, 
       sum(decode(kpiid,102,kpivalue,0)) name2,
      ... 
     from a group by createdate;
      

  3.   

    procedure getRstData( rst out sys_refcursor)
      is
      begin
        declare  
        cursor   cur is  select distinct (kpiName) from   t;  
        fkpiname varchar2(100);  
        str      varchar2(4000);  
        begin  
          str:='select createDate ';  
          open cur;  
          loop   
            fetch cur into fkpiname;  
            exit when cur%notfound;  
            str:=str||',sum(decode(kpiName,'||chr(39)||fkpiname||chr(39)||',kpiValue,0)) '||fkpiname;  
          end loop;  
          str:=str||' from t group by createDate';  
    --      dbms_output.put_line(str);  
          close cur;
          open rst for str;  
        end;  
      end;