Oracle 行轉列(pivot、wm_concat、decode)使用實例

1.創建測試表

CREATE TABLE CC
  (Student NVARCHAR2(2),Course NVARCHAR2(2),Score INT
  );

2.插入測試數據

INSERT into CC 
select N'張三',N'語文',78 from dual union all
select N'張三',N'數學',87 from dual union all
select N'張三',N'英語',82 from dual union all
select N'張三',N'物理',90 from dual union all
select N'李四',N'語文',65 from dual union all
select N'李四',N'數學',77 from dual union all
select N'李四',N'英語',65 from dual union all
select N'李四',N'物理',85 from dual ;
commit;

3.使用不同函數的結果

 

使用WM_CONCAT函數:

SELECT STUDENT,TO_CHAR(WM_CONCAT(SCORE)),SUM(SCORE) FROM CC GROUP BY STUDENT;

執行結果:

 

使用PIVOT函數:

SELECT T1.*,T1.語文+T1.數學+T1.英語+T1.物理 AS 總計
FROM
    (
     SELECT * FROM CC PIVOT ( MAX(SCORE) FOR COURSE IN ('語文' AS 語文 , '數學' AS 數學, '英語' AS 英語,'物理' AS 物理) )
  ) T1;

執行結果:

 

使用DECODE函數:

  SELECT STUDENT,
       MAX(DECODE(COURSE, '語文', SCORE)) 語文,
       MAX(DECODE(COURSE, '數學', SCORE)) 數學,
       MAX(DECODE(COURSE, '英語', SCORE)) 英語,
       MAX(DECODE(COURSE, '物理', SCORE)) 物理,
       SUM(SCORE) 總計
  FROM CC
 GROUP BY STUDENT;

執行結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章