在oracle中進行列行轉換
1、固定列數的行列轉換如
student subject grade ---------------------------
student1 語文 80
student1 數學 70
student1 英語 60
student2 語文 90
student2 數學 80
student2 英語 100
轉換為
語文 數學 英語
student1 80 70 60
student2 90 80 100
語句如下:
select student,sum(decode(subject,'語文', grade,null)) "語文",
sum(decode(subject,'數學', grade,null)) "數學",
sum(decode(subject,'英語', grade,null)) "英語"
from table
group by student
2、不定列行列轉換如
c1 c2 -------------- 1 我
1 是
1 誰
2 知
2 道
3 不 ...... 轉換為
1 我是誰
2 知道
3 不
這一類型的轉換必須借助于PL/SQL來完成,這里給一個例子
CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
--用于返回值
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHEREc1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
END;
想了解更多?現在就開始免費體驗