简单的行转列,成绩统计方式,oracle和mysql通用方式
在看行转列的时候,看到网上很多资料都写的太复杂,我记录一个比较简单的方式,作为自己行转列的初步学习可以看看,解决比较复杂的业务问题可能帮不上忙,勿喷。
主要实现思路就是,先将行转成列,但是这个时候,会出现:
执行语句:
SELECT NAME
姓名,
CASE
SUBJECT
WHEN '语文' THEN
score
END 语文,
CASE
SUBJECT
WHEN '数学' THEN
score
END 数学,
CASE
SUBJECT
WHEN '英语' THEN
score
END 英语
FROM
student
效果图:
这种结果,然后就需要使用聚合函数来将数据合并到一列,因为这里是分数,使用sum求和函数,如果是字符串的话可以用concat来聚合。
下面是实现过程:
数据示例:
转换效果:
1、oracle-decode方式:
SELECT
NAME 姓名,
sum( decode( SUBJECT, '语文', score, 0 ) ) 语文,
sum( decode( SUBJECT, '数学', score, 0 ) ) 数学,
sum( decode( SUBJECT, '英语', score, 0 ) ) 英语
FROM
student
GROUP BY
NAME
2、mysql,oracle 通用方式,使用case when的方式:
SELECT
NAME 姓名,
sum( CASE SUBJECT WHEN '语文' THEN score END ) 语文,
sum( CASE SUBJECT WHEN '数学' THEN score END ) 数学,
sum( CASE SUBJECT WHEN '英语' THEN score END ) 英语
FROM
student
GROUP BY
NAME