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

无需SUM/MAX聚合的SQL PIVOT数据转置方法求助

解决SQL PIVOT聚合导致的非预期转置问题

你的问题核心是缺少分组标识,直接用PIVOT会把同一Code下的所有值聚合,而你需要的是按每个Code的行顺序对应转置。解决方法是先给每个Code的行添加行号,让PIVOT能按行号匹配对应位置的值。

修正后的查询语句

SELECT A, B, C
FROM (
    SELECT 
        Code, 
        ColVal,
        -- 给每个Code的行按ColVal排序生成唯一行号
        ROW_NUMBER() OVER (PARTITION BY Code ORDER BY ColVal) AS RowNum
    FROM YourTable -- 替换成你的实际表名
) TBL
PIVOT (
    MAX(ColVal) -- 这里用MAX或SUM均可,同一RowNum下每个Code仅对应一个值,不会产生聚合合并
    FOR Code IN (A, B, C)
) AS pvt

原理说明

  • 用ROW_NUMBER() OVER (PARTITION BY Code ORDER BY ColVal)给每个Code分组内的行生成序号,让每个Code的第1行、第2行等都有对应的唯一标识。
  • PIVOT会自动以RowNum作为分组依据,每个RowNum下每个Code最多只有一个值,因此使用MAX/SUM只会取出对应位置的数值,无值的位置自动显示NULL,完全匹配你的预期输出。

执行结果

运行上述语句后,输出将与预期一致:

A    B   C
1    1   1
2    2   2
3    3   NULL
NULL 4   NULL

内容的提问来源于stack exchange,提问作者Naveen Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:12:05