Sql行转列,sql语句如何实现行转列

Sql行转列,sql语句如何实现行转列,SQL行转列、列转行的简单实现

本文主要介绍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按姓名分组

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。

Sql行转列,sql语句如何实现行转列