在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查询的效率和可读性。
了解详细信息
评论区