行转列适用于按照数据的某个维度的聚合,例如成绩单,按照学生姓名整合各科成绩;
列转行适用于拆分某条数据的各属性,例如拆分学生成绩单,按名称、学科、成绩展示;
行转列方法:
通常使用聚合函数对数据进行处理,例如sum、max、count等
SELECT user_name ,
MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语
FROM student
GROUP BY USER_NAME;
列转行方法:
通常使用union、union all进行数据组合
select user_name, '语文' COURSE , CN_SCORE as SCORE from grade
union select user_name, '数学' COURSE, MATH_SCORE as SCORE from grade
union select user_name, '英语' COURSE, EN_SCORE as SCORE from grade
order by user_name,COURSE;
标签:name,union,转行,专列,COURSE,SCORE,user,SQL
From: https://www.cnblogs.com/Zhao01/p/18051172