数据库SQL行专列和列转行

行转列适用于按照数据的某个维度的聚合,例如成绩单,按照学生姓名整合各科成绩;
列转行适用于拆分某条数据的各属性,例如拆分学生成绩单,按名称、学科、成绩展示;

行转列方法:

通常使用聚合函数对数据进行处理,例如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;

posted on 2024-03-04 09:18  bug耗子  阅读(6)  评论(0编辑  收藏  举报

导航