表的内容:
项目 机构 值
-----------------------
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
项目 机构 值
-----------------------
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
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;
/
sum(decode( 机构,'北京',值,0)) "北京",
sum(decode( 机构,'天津',值,0)) "天津",
sum(decode( 机构,'上海',值,0)) "上海"
from tab
group by 项目
sum(decode( 机构,'北京',值,0)) "北京",
sum(decode( 机构,'天津',值,0)) "天津",
sum(decode( 机构,'上海',值,0)) "上海"
from tab
group by 项目