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

MS SQL Server中使用动态UNPIVOT实现列转行的方法咨询

MS SQL Server宽表转Tableau适配长表实现方案

你当前的需求是典型的宽表转长表场景,完全可以通过UNPIVOT实现,以下是两种可直接复用的实现方案:

方式1:静态实现(已提前获知所有财季列表)

如果你可以提前提供全部财季的字段列表,直接替换代码中对应部分即可使用:

SELECT 
    员工ID, 员工姓名, 部门, -- 此处替换为你实际的员工描述字段
    LEFT(财季, CHARINDEX('_',财季)-1) AS 财季,
    Quota,
    Achievement
FROM 
    你的原表名称
UNPIVOT
(
    Quota FOR 财季 IN (
        FY23Q1_Quota, 
        FY23Q2_Quota,
        FY23Q3_Quota,
        FY23Q4_Quota -- 此处替换为你所有财季的Quota字段名
    )
) AS unpvt_quota
UNPIVOT
(
    Achievement FOR Ach_财季 IN (
        FY23Q1_Achievement, 
        FY23Q2_Achievement,
        FY23Q3_Achievement,
        FY23Q4_Achievement -- 此处替换为你所有财季的Achievement字段名
    )
) AS unpvt_ach
WHERE LEFT(财季, CHARINDEX('_',财季)-1) = LEFT(Ach_财季, CHARINDEX('_',Ach_财季)-1)

说明:WHERE条件用于匹配同一财季的Quota和Achievement值,避免交叉关联生成错误数据。如果需要保留对应指标为NULL的行,可先将原表NULL值替换为0或其他占位值再执行UNPIVOT。


方式2:动态实现(自动适配后续新增财季字段)

如果后续会持续新增财季字段,只要保持字段命名规范为财季标识_Quota、财季标识_Achievement,就可以用动态SQL自动适配,无需每次手动修改代码:

DECLARE @sql NVARCHAR(MAX),
        @quota_cols NVARCHAR(MAX),
        @ach_cols NVARCHAR(MAX)

-- 自动读取所有Quota字段
SELECT @quota_cols = COALESCE(@quota_cols + ',','') + QUOTENAME(name)
FROM sys.columns 
WHERE object_id = OBJECT_ID('你的原表名称') AND name LIKE '%\_Quota' ESCAPE '\'

-- 自动读取所有Achievement字段
SELECT @ach_cols = COALESCE(@ach_cols + ',','') + QUOTENAME(name)
FROM sys.columns 
WHERE object_id = OBJECT_ID('你的原表名称') AND name LIKE '%\_Achievement' ESCAPE '\'

-- 拼接执行SQL
SET @sql = N'
SELECT 
    员工ID, 员工姓名, 部门, -- 此处替换为你实际的员工描述字段
    LEFT(财季, CHARINDEX(''_'',财季)-1) AS 财季,
    Quota,
    Achievement
FROM 
    你的原表名称
UNPIVOT
(
    Quota FOR 财季 IN (' + @quota_cols + N')
) AS unpvt_quota
UNPIVOT
(
    Achievement FOR Ach_财季 IN (' + @ach_cols + N')
) AS unpvt_ach
WHERE LEFT(财季, CHARINDEX(''_'',财季)-1) = LEFT(Ach_财季, CHARINDEX(''_'',Ach_财季)-1)
'

EXEC sp_executesql @sql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:03