Oracle 行列轉置

兩種簡單的行列轉置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;
相關文章
相關標籤/搜索