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

SQL Server如何实现列转行并保留首列在每行重复显示

SQL Server 列转行并保留首列重复的实现方法

你可以通过以下两种常用方案实现需求,两种方案都能自动将第一列Material的值在转换后的每一行重复展示:

方法1:使用 UNPIVOT 原生列转行运算符

UNPIVOT是SQL Server专门为列转行场景设计的语法,写法简洁,适合固定列的转换场景:

SELECT Material, Quantity
FROM (
    -- 原有基础查询
    SELECT TOP 1 Material, Past, WK1_05_23, WK2_05_30, WK3_06_06
    FROM Forecast
) source_table
UNPIVOT (
    -- 转换后的值列命名为Quantity,原列名存在WeekCol字段中(不需要可忽略不查)
    Quantity FOR WeekCol IN (Past, WK1_05_23, WK2_05_30, WK3_06_06)
) unpivot_result

执行结果和你预期的格式完全匹配,如果需要区分每个Quantity来自原表的哪一列,可以把WeekCol字段也加入SELECT查询列表。

方法2:使用 CROSS APPLY 配合 VALUES 构造行

这种写法更灵活,不需要记忆专用语法,支持自定义转换逻辑,多数场景下性能和UNPIVOT相当:

SELECT t.Material, v.Quantity
FROM (
    -- 原有基础查询
    SELECT TOP 1 Material, Past, WK1_05_23, WK2_05_30, WK3_06_06
    FROM Forecast
) t
CROSS APPLY (
    -- 每一个括号对应转换后的一行,填入需要拆成行的原列即可
    VALUES (Past), (WK1_05_23), (WK2_05_30), (WK3_06_06)
) v(Quantity)

如果后续需要新增要转换的列,只需要在VALUES里新增一行括号填入对应列名即可,维护成本更低。

两种方案都支持多Material行的转换,如果去掉TOP 1查询多个物料,每个物料的数值会独立拆分成对应行,不会出现数据串错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:03:36