SQL中行转列实现咨询:将月度价格表转为横向展示
行转列(Pivot)实现方案
你需要的是**行转列(Pivot)**操作——将原表中Month字段的行值转换为结果表的列名,Price字段的值对应填充到对应列下。
1. 测试表创建与数据插入
SQL Server 版本
-- 创建测试表 CREATE TABLE MonthlyPrices ( Month INT, Price INT ); -- 插入测试数据 INSERT INTO MonthlyPrices (Month, Price) VALUES (1, 500), (2, 600), (3, 700);
MySQL 版本
-- 创建测试表 CREATE TABLE MonthlyPrices ( Month INT, Price INT ); -- 插入测试数据 INSERT INTO MonthlyPrices (Month, Price) VALUES (1, 500), (2, 600), (3, 700);
2. 行转列查询实现
SQL Server 原生Pivot语法
SELECT [1], [2], [3] FROM MonthlyPrices PIVOT ( MAX(Price) FOR Month IN ([1], [2], [3]) ) AS PivotTable;
这里用MAX()聚合函数是因为Pivot必须配合聚合操作,由于每个Month对应唯一Price,使用MAX/AVG/MIN的结果一致。
MySQL 模拟Pivot(无原生Pivot语法)
SELECT MAX(CASE WHEN Month = 1 THEN Price END) AS `1`, MAX(CASE WHEN Month = 2 THEN Price END) AS `2`, MAX(CASE WHEN Month = 3 THEN Price END) AS `3` FROM MonthlyPrices;
通过CASE语句配合聚合函数,手动将行值映射为列名。
执行结果
执行上述查询后,会得到如下横向展示的结果:
| 1 | 2 | 3 |
|---|---|---|
| 500 | 600 | 700 |
内容的提问来源于stack exchange,提问作者Kibofigs
相关产品推荐
相关产品推荐

