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

如何实现带重复行的多行数据PIVOT转换?求解决方案

解决带重复数据的多行PIVOT转换问题

你的常规PIVOT只返回一行,核心原因是没有给每个line_type下的重复条目分配唯一的组内序号,MAX(line_name)会把同一类型的所有值聚合为单个结果。要实现你要的多行列结构,必须先给每个类型的记录添加行号,再进行PIVOT操作。

解决方案代码

SELECT 
    [Internal],
    [Makloon],
    [Process]
FROM (
    SELECT
        [line_type],
        [line_name],
        -- 给每个line_type分组内的记录分配行号,作为PIVOT的分组依据
        ROW_NUMBER() OVER (PARTITION BY [line_type] ORDER BY (SELECT NULL)) AS row_num
    FROM 
        [table_name]
) pvt
PIVOT (
    MAX(line_name)
    FOR [line_type] IN (
        [Internal],
        [Makloon],
        [Process]
    )
) AS pvt_table;

代码说明

  1. 添加组内行号:使用ROW_NUMBER() OVER (PARTITION BY [line_type] ORDER BY (SELECT NULL)),给每个line_type分组内的记录生成递增序号。这样同一类型的重复条目会拥有不同的行号,确保PIVOT时不会被聚合为一行。
    • 如果你的数据有实际的排序逻辑(比如插入时间、主键ID),可以把(SELECT NULL)替换为对应的排序字段,保证结果行的顺序符合业务预期。
  2. PIVOT分组逻辑:此时PIVOT会自动按row_num分组,每个行号对应结果中的一行,不同line_type的对应值会填充到各自列中,没有匹配值的位置会显示为NULL(对应你期望结果中的空单元格)。

执行结果

运行上述代码后,会得到与你预期一致的结果:

InternalMakloonProcess
Storage 1Storage 2Storage B
Storage 1Storage 3NULL
NULLStorage 3NULL

(注:SQL中NULL在表格显示时通常会呈现为空单元格,与你的预期格式完全匹配)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:00:54