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

SQL Server 2019:如何将多列平均值数据转为纵向行格式

解决方案:SQL Server 实现列转行(逆透视)

你需要的是**逆透视(Unpivot)**操作(Pivot是行转列,和你的需求相反),可以直接用SQL Server内置的UNPIVOT关键字,或者更灵活的CROSS APPLY方法,无需用循环处理,效率更高。

方法1:使用UNPIVOT关键字

SELECT 
    AVERAGENAME,
    AVERAGESCORE
FROM 
    tbl
UNPIVOT
(
    -- 指定数值列的别名
    AVERAGESCORE FOR AVERAGENAME IN (
        -- 列出需要转换的原列名
        P1AVERAGE, 
        P2AVERAGE, 
        P3AVERAGE
    )
) AS UnpivotResult
-- 可选:按原Id和平均值名称排序,和示例结果顺序一致
ORDER BY Id, AVERAGENAME;

方法2:使用CROSS APPLY(更灵活)

如果需要自定义AVERAGENAME的显示格式(比如改成小写的p1Average),或者后续需要扩展逻辑,CROSS APPLY更适合:

SELECT 
    ca.AVERAGENAME,
    ca.AVERAGESCORE
FROM 
    tbl
CROSS APPLY
(
    VALUES
        ('p1Average', P1AVERAGE),
        ('p2Average', P2AVERAGE),
        ('p3Average', P3AVERAGE)
) AS ca(AVERAGENAME, AVERAGESCORE)
-- 可选:按原Id和名称排序
ORDER BY Id, ca.AVERAGENAME;

说明

  • 你原来的循环方法属于逐行处理,在SQL中这种方式性能极低,完全没必要——SQL是基于集合的语言,应该用上述集合式操作完成需求。
  • 两种方法都能直接得到你需要的输出格式,无需临时表和循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:05