如题。

解决方案 »

  1.   

    转接,与此类似
    --测试数据
    create table t (XH varchar2(10), DDATE date, SXF int);
    insert into t
    select 1,sysdate,10 from dual union all
    select 1,sysdate+1,14 from dual union all
    select 1,sysdate+2,23 from dual union all
    select 2,sysdate,21 from dual union all
    select 2,sysdate+1,24 from dual union all
    select 3,sysdate,13 from dual union all
    select 3,sysdate+1,22 from dual;
    --
    create or replace package sp_test
    is
    type ResultData is ref cursor;
    procedure getRstData( rst out ResultData);
    end sp_test;
    /
    create or replace package body sp_test
    is
    procedure getRstData( rst out ResultData)
    is
    begin
    declare
    cursor cur is select distinct (DDATE) from t;
    tmp_ddate date;
    str varchar2(4000);
    begin
    str:='select xh';
    open cur;
    loop
    fetch cur into tmp_ddate;
    exit when cur%notfound;
    str:=str||',sum(decode(to_char(ddate,''yyyymmdd''),'||chr(39)||to_char(tmp_ddate,'yyyymmdd')||chr(39)||',sxf,0)) "'||to_char(tmp_ddate,'yyyymmdd')||'"';
    end loop;
    str:=str||' from t group by xh';
    -- dbms_output.put_line(str);
    close cur;
    open rst for str;
    end;
    end;
    end sp_test;
    /--输出结果
    1 10 14 23
    2 21 24 0
    3 13 22 0
      

  2.   

    固定列,就用decode 
    非固定列,要用到存储过程或用PL/SQL来做也行
      

  3.   

    那么先讨论简单的固定列,如何用decode 
      

  4.   

    比如说有数据
    Name  class score
    小明  语文   80
    小强  数学   90
    小明  英语   89
    小强  语文   70
    小明  数学   95
    小强  英语   85要求出来
    姓名   语文  数学  英语
    小明   80    95    89
    小强   70    90    85这时候就以用decode来做
    SELECT   NAME 姓名, SUM (DECODE (CLASS, '语文', score, 0)) 语文,
             SUM (DECODE (CLASS, '数学', score, 0)) 数学,
             SUM (DECODE (CLASS, '英语', score, 0)) 英语
        FROM table
    GROUP BY NAME
      

  5.   

    不固定的,参考此贴
    http://topic.csdn.net/u/20080416/11/910e40c1-60f1-441f-8b0f-19a969d30f77.html
      

  6.   

    SELECT ID,
            MAX(DECODE(NAME, 'aa', 'aa' )) aa,
            MAX(DECODE(NAME, 'bb', 'bb' )) bb,
            MAX(DECODE(NAME, 'cc', 'cc' )) cc  
      FROM tt GROUP BY ID;