兩種簡單的行列轉置spa
一、固定列數的行列轉換
如
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;
二、不定列行列轉換
如
c1 c2
--- -----------
1 我
1 是
1 誰
2 知
2 道
3 不
……
轉換爲
1 我是誰
2 知道
3 不code
這一類型的轉換必須藉助於PL/SQL來完成,這裏給一個例子get
CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
END;
/
SQL> select distinct c1 ,get_c2(c1) cc2 from table;