表的内容:
项目     机构       值 
-----------------------
AAA     北京     10
AAA     天津        20
AAA     上海        30
BBB     北京     34
BBB     天津        56
BBB     上海        89
CCC     北京     23
CCC     天津        65
CCC     上海        90
要求实现的样式:项目     北京     天津     上海
---------------------------------
AAA      10        20       30
BBB      34        56       89
CCC      23        65       90

解决方案 »

  1.   

    破例写个代码,mytab中就是你要的转置后的数据,如何处理随你的便吧。我用put_line打出来的。
    CREATE OR REPLACE PROCEDURE DOER.DP01
    IS
    VID VARCHAR2(10);
    FVID VARCHAR(10);
    VAD VARCHAR2(10);
    NCT NUMBER(6);
    ILOOP NUMBER;
    TYPE MYRCD IS RECORD(CID VARCHAR2(10),TJ NUMBER(6),SH NUMBER(6),BJ NUMBER(6));
    TYPE MYTYPE IS TABLE OF MYRCD INDEX BY BINARY_INTEGER;
    MYTAB MYTYPE;
    CURSOR CSR IS SELECT A,D,B FROM DT01 ORDER BY A,D;
    BEGIN
      ILOOP := 0;
      FVID := NULL;
      OPEN CSR;
      LOOP
    FETCH CSR INTO VID,VAD,NCT;
    EXIT WHEN CSR%NOTFOUND;
    IF FVID = VID THEN
      NULL;
    ELSE
      ILOOP := ILOOP + 1;
      MYTAB(ILOOP).CID := VID;
    END IF;
    FVID := VID;
    CASE 
    WHEN VAD = 'TJ' THEN MYTAB(ILOOP).TJ := NCT;
    WHEN VAD = 'SH' THEN MYTAB(ILOOP).SH := NCT;
    WHEN VAD = 'BJ' THEN MYTAB(ILOOP).BJ := NCT;
    END CASE;
      END LOOP;
      ILOOP := 0;
      DBMS_OUTPUT.PUT_LINE('CID    TJ    SH   BJ');
      LOOP
    ILOOP := ILOOP + 1;
    EXIT WHEN ILOOP > MYTAB.COUNT;
    DBMS_OUTPUT.PUT_LINE(MYTAB(ILOOP).CID||'   '||MYTAB(ILOOP).TJ||'    '||MYTAB(ILOOP).SH||'   '||MYTAB(ILOOP).BJ);
      END LOOP;
      CLOSE CSR;
    END;
    /
      

  2.   

    select 项目,
           sum(decode( 机构,'北京',值,0)) "北京",
           sum(decode( 机构,'天津',值,0)) "天津",
           sum(decode( 机构,'上海',值,0)) "上海"
    from tab
    group by 项目
      

  3.   

    select 项目,
           sum(decode( 机构,'北京',值,0)) "北京",
           sum(decode( 机构,'天津',值,0)) "天津",
           sum(decode( 机构,'上海',值,0)) "上海"
    from tab
    group by 项目
      

  4.   

    动态Sql中用decode三,还能怎样捏??