问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL行转列、列转行的简单实现

创作时间:
作者:
@小白创作中心

SQL行转列、列转行的简单实现

引用
1
来源
1.
https://www.zhangshengrong.com/p/ERNnQMw2a5/

行列转换是报表分析中常见的需求,本文将介绍如何使用SQL实现行转列和列转行的转换。

行转列

假设我们有以下学生分数表:

可以使用PIVOT关键字实现行转列:

SELECT *
FROM student
PIVOT (
 SUM(score) FOR subject IN (语文, 数学, 英语)
)

执行结果如下:

这里需要注意:

  • PIVOT后跟一个聚合函数(如SUM)来获取结果
  • FOR后面的科目是我们要转换的列
  • IN后面的值是具体的科目名称

除了使用PIVOT,还可以使用CASE WHEN语句实现相同的效果,虽然代码量会多一些:

SELECT name,
 MAX(
 CASE
 WHEN subject='语文'
 THEN score
 ELSE 0
 END) AS "语文",
 MAX(
 CASE
 WHEN subject='数学'
 THEN score
 ELSE 0
 END) AS "数学",
 MAX(
 CASE
 WHEN subject='英语'
 THEN score
 ELSE 0
 END) AS "英语"
FROM student
GROUP BY name

列转行

假设我们有以下学生分数表:

可以使用UNPIVOT关键字实现列转行:

SELECT *
FROM student1
UNPIVOT (
 score FOR subject IN ("语文","数学","英语")
)

执行结果如下:

同样,也可以使用UNION操作实现相同的效果:

SELECT
 NAME,
 '语文' AS subject ,
 MAX("语文") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
 NAME,
 '数学' AS subject ,
 MAX("数学") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
 NAME,
 '英语' AS subject ,
 MAX("英语") AS score
FROM student1 GROUP BY NAME

总结

以上就是SQL实现行转列和列转行的两种主要方法。希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号