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

如何使用T-SQL将数据库表转换为指定透视表布局?

使用T-SQL PIVOT实现表格转置方案

核心思路

要实现你需要的布局,得先做**逆透视(UNPIVOT)把原表的数值列转成指标行,再做透视(PIVOT)**把日期列转成横向的日期字段。既然你明确每个项目的slver_date数量固定,直接写死日期列名即可,不用动态处理。

具体实现代码

假设你的原表名为OriginalInventoryTable,包含项目标识字段(比如item_code)、slver_date以及所有需要转换的数值字段,执行以下T-SQL语句:

SELECT 
    metric_name,
    [2024-01-01] AS [2024-01-01], -- 替换为你的实际日期,按需添加更多日期列
    [2024-01-08] AS [2024-01-08],
    [2024-01-15] AS [2024-01-15]
FROM (
    -- 第一步:逆透视,把数值列转成指标行,保留项目和日期关联
    SELECT 
        item_code,
        slver_date,
        CASE 
            WHEN metric = 'oh_qty' THEN 'starting onhand'
            WHEN metric = 'firm_po' THEN 'Firm Purchase Order'
            WHEN metric = 'act_demand' THEN 'firm_demand'
            WHEN metric = 'tot_plan_trans_out' THEN 'Planned Transfer Out'
            WHEN metric = 'foh_ss' THEN 'FOH-SS'
            WHEN metric = 'ss_qrt' THEN 'Safety Stock Qty'
            WHEN metric = 'planned_purch' THEN 'Planned Purchase'
        END AS metric_name,
        metric_value
    FROM OriginalInventoryTable
    UNPIVOT (
        metric_value FOR metric IN (
            oh_qty, firm_po, act_demand, tot_plan_trans_out, foh_ss, ss_qrt, planned_purch
        )
    ) AS unpvt
) AS src
-- 第二步:透视,把日期转成横向列
PIVOT (
    SUM(metric_value) -- 因每个项目+日期+指标唯一,用SUM/MAX结果一致
    FOR slver_date IN (
        [2024-01-01], [2024-01-08], [2024-01-15] -- 替换为你的实际日期列表
    )
) AS pvt
ORDER BY metric_name; -- 按指标名称排序,可选

代码说明

  1. UNPIVOT部分:把原表中7个数值列拆分成metric(原字段名)和metric_value(对应字段值)的行结构,同时用CASE把原字段名替换成你需要的显示名称。
  2. PIVOT部分:以slver_date的具体值作为新列名,将每个指标在对应日期的数值填充到列中。
  3. 日期列处理:只需把FOR slver_date IN()里的日期替换成你实际的slver_date值,有多少个日期就添加多少个。

如果原表没有项目标识字段(比如item_code),可以去掉外层查询的item_code;但如果存在多个项目,建议保留该字段并在SELECT和ORDER BY中包含,方便区分不同项目的指标数据。

内容的提问来源于stack exchange,提问作者Joseph Kyle Diel Mahasol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:25:08