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;
执行结果: