sql基础之行列转换
【摘要】 列转行在 SQL 中,转换数据以按列排列的值成为按行排列的值(即所谓的“列转行”或“列转行”)是常见的数据操作需求。这个操作在不同的数据库管理系统中可以通过不同的技术手段来实现。以下是几种常见的数据库系统中实现列转行的方法:使用 UNION ALL(适用于所有 SQL 数据库)如果你的列数是固定的,可以使用 UNION ALL 将多个列的数据合并到一个新的结果集的单一列中。示例数据假设有一...
列转行
在 SQL 中,转换数据以按列排列的值成为按行排列的值(即所谓的“列转行”或“列转行”)是常见的数据操作需求。这个操作在不同的数据库管理系统中可以通过不同的技术手段来实现。以下是几种常见的数据库系统中实现列转行的方法:
使用 UNION ALL(适用于所有 SQL 数据库)
如果你的列数是固定的,可以使用 UNION ALL 将多个列的数据合并到一个新的结果集的单一列中。
示例数据
假设有一个表 Sales:
product_id sales_q1 sales_q2 sales_q3 sales_q4
1 100 150 200 250
2 110 160 210 260
以下是一个将每个季度的销售数据转为行的查询示例:
SELECT product_id, ‘Q1’ AS quarter, sales_q1 AS sales FROM Sales
UNION ALL
SELECT product_id, ‘Q2’, sales_q2 FROM Sales
UNION ALL
SELECT product_id, ‘Q3’, sales_q3 FROM Sales
UNION ALL
SELECT product_id, ‘Q4’, sales_q4 FROM Sales;
结果:
product_id quarter sales
1 Q1 100
1 Q2 150
1 Q3 200
1 Q4 250
2 Q1 110
2 Q2 160
2 Q3 210
2 Q4 260
行转列
使用 case when(适用于所有 SQL 数据库)
这种方法适用于所有支持 SQL 的数据库,适用于数据量不大的简单场景。
示例数据
假设有一个表 Sales:
product_id quarter sales
1 Q1 100
1 Q2 150
1 Q3 200
1 Q4 250
2 Q1 110
2 Q2 160
2 Q3 210
2 Q4 260
使用 CASE 语句和 GROUP BY 来实现行转列:
SELECT
product_id,
SUM(CASE WHEN quarter = ‘Q1’ THEN sales ELSE 0 END) AS sales_q1,
SUM(CASE WHEN quarter = ‘Q2’ THEN sales ELSE 0 END) AS sales_q2,
SUM(CASE WHEN quarter = ‘Q3’ THEN sales ELSE 0 END) AS sales_q3,
SUM(CASE WHEN quarter = ‘Q4’ THEN sales ELSE 0 END) AS sales_q4
FROM Sales
GROUP BY product_id;
product_id sales_q1 sales_q2 sales_q3 sales_q4
1 100 150 200 250
2 110 160 210 260
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)