本文主要介绍SQL行到列和列到列转换的简单实现方法。通过示例代码详细介绍,对大家学习或使用SQL有一定的参考价值。需要朋友就一起学吧。
前言
行列转换是报表分析中经常遇到的问题。今天就来说说如何实现行列转换。
行列转换是两种显示形式的相互转换,如下图所示。
行转列
假设我们有下表:
选择*
来自学生
枢轴(
(语文、数学、英语)科目的总分
)
上面SQL语句可以获得以下结果。
PIVOT后面跟一个聚合函数得到结果,后面跟FOR的科目就是我们要转换的列,这样科目中的语文、数学、英语就转换成列了。IN后面是特定的主题值。
当然,用CASE WHEN也可以得到同样的结果,写起来稍微麻烦一点。
选择名称,
最大(
情况
当主题=语言
然后得分
否则0
END)作为“语言”,
最大(
情况
当科目=数学
然后得分
否则0
END)为‘数学’,
最大(
情况
当subject= English
然后得分
否则0
END)为“英语”
来自学生
按名称分组
使用CASE WHEN可以得到和PIVOT一样的结果,不如PIVOT简单直观。
列转行
假设我们有下面的表student1。
选择*
来自学生1
取消透视(
科目分数(“语文”、“数学”、“英语”)
)
通过UNPIVOT可以获得以下结果:
我们也可以用下面的方法得到同样的结果。
挑选
姓名,
“中文”作为主语,
分数最高(中文)
来自学生1按姓名分组
联盟
挑选
姓名,
数学作为一门学科,
最高分数(数学)
来自学生1按姓名分组
联盟
挑选
姓名,
“英语”作为主题,
最高分(英语)
来自学生1按姓名分组
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。