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;

执行结果:

 

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