侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
SQL

SQL 行转列函数

Administrator
2025-01-25 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

在SQL查询中,行转列和列转行是常见的数据转换需求。行转列是将原本同一列下多行的不同内容作为多个字段输出,而列转行则是将多个字段的内容转换为多行显示。以下是实现行转列和列转行的几种方法。

行转列

假设有一张表T,字段有name, subject, score,数据如下:

Name Subject Score

小明 语文 30

小明 数学 22

小明 英语 66

小花 语文 30

小花 数学 33

小花 英语 67

我们希望将其转换为如下格式:

Name 语文 数学 英语

小明 30 22 66

小花 30 33 67

使用CASE WHEN

可以使用CASE WHEN语句来实现行转列:

SELECT name,

MAX(CASE subject WHEN '语文' THEN score ELSE 0 END) AS 语文,

MAX(CASE subject WHEN '数学' THEN score ELSE 0 END) AS 数学,

MAX(CASE subject WHEN '英语' THEN score ELSE 0 END) AS 英语

FROM T

GROUP BY name;

使用PIVOT

PIVOT是一个更简洁的方法:

SELECT *

FROM T

PIVOT (SUM(score) FOR subject IN (语文, 数学, 英语));

列转行

假设有一张表T,字段有name, 语文, 数学, 英语,数据如下:

Name 语文 数学 英语

小明 30 22 66

小花 30 33 67

我们希望将其转换为如下格式:

Name Subject Score

小明 语文 30

小明 数学 22

小明 英语 66

小花 语文 30

小花 数学 33

小花 英语 67

使用UNION ALL

可以使用UNION ALL来实现列转行:

SELECT name, '语文' AS subject, 语文 AS score FROM T

UNION ALL

SELECT name, '数学' AS subject, 数学 AS score FROM T

UNION ALL

SELECT name, '英语' AS subject, 英语 AS score FROM T;

使用UNPIVOT

UNPIVOT是一个更高级的方法:

SELECT *

FROM T

UNPIVOT (score FOR subject IN (语文, 数学, 英语));

这些方法可以帮助你在SQL查询中实现行转列和列转行的需求12。根据具体情况选择合适的方法,可以提高SQL查询的效率和可读性。

了解详细信息

0

评论区