在Microsoft SQL Server中如何通过SQL实现数据unstack行转列操作
行转列实现方案
以下两种实现方案均可得到你需要的转换结果:
方法1:通用CASE WHEN聚合实现(全数据库兼容)
该方法不依赖特定数据库的PIVOT语法,所有SQL数据库都可直接使用:
SELECT UTC_DT, MAX(CASE WHEN ID = 1 THEN value END) AS `1`, MAX(CASE WHEN ID = 2 THEN value END) AS `2`, MAX(CASE WHEN ID = 3 THEN value END) AS `3` FROM 你的表名 GROUP BY UTC_DT ORDER BY UTC_DT;
如果同一个UTC_DT+ID组合存在多条记录,可根据业务需求把MAX替换为SUM、AVG等对应的聚合函数
方法2:各数据库原生PIVOT语法实现
SQL Server 写法
SELECT UTC_DT, [1], [2], [3] FROM 你的表名 PIVOT ( MAX(value) FOR ID IN ([1], [2], [3]) ) AS pivot_result ORDER BY UTC_DT;
Oracle 写法
SELECT * FROM 你的表名 PIVOT ( MAX(value) FOR ID IN (1 AS "1", 2 AS "2", 3 AS "3") ) ORDER BY UTC_DT;
PostgreSQL 写法
PostgreSQL需先启用tablefunc扩展后使用crosstab函数实现:
-- 首次使用前执行一次即可 CREATE EXTENSION IF NOT EXISTS tablefunc; SELECT * FROM crosstab( 'SELECT UTC_DT, ID, value FROM 你的表名 ORDER BY 1,2', 'SELECT DISTINCT ID FROM 你的表名 ORDER BY 1' ) AS ct(UTC_DT timestamp, "1" int, "2" int, "3" int);
MySQL 写法
MySQL无原生PIVOT语法,直接使用方法1的CASE WHEN方案即可。
内容的提问来源于stack exchange,提问作者XiB
相关产品推荐
相关产品推荐

