You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:48:01