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

Teradata中多列SQL Pivot实现方法咨询

多列Pivot实现思路(针对BOM/EOM日期快照)

核心思路

要实现多维度(日期类型+日期)的行转列,关键是先把**日期类型(BOM/EOM)和快照日期的标识(如年月)**合并成一个新的复合列,再基于这个复合列做单列Pivot;或者用CASE WHEN的方式直接生成目标列。


方法一:Excel环境下操作

  1. 添加辅助列:在原数据中新增一列,公式示例:=B2&"_"&TEXT(C2,"YYYYMM")(假设B列是日期类型,C列是快照日期),生成类似BOM_202301、EOM_202301的复合列名。
  2. 插入数据透视表:选中所有数据,插入透视表,将「物料号」拖到行区域,辅助列拖到列区域,「计划日期」拖到值区域(值字段设置为「最大值」或「最小值」,因为每个物料+复合列的组合对应唯一日期)。
  3. 整理布局:调整列标签顺序,按需删除多余字段,即可得到目标格式。

方法二:SQL环境下操作

方案A:用PIVOT函数(需先构造复合列)

以SQL Server为例,先把日期类型和快照年月拼接成新列,再做Pivot:

SELECT Material_Number,
       [BOM_202301], [EOM_202301],
       [BOM_202302], [EOM_202302]
-- 按需列出所有需要的复合列名
FROM (
    -- 子查询构造复合列
    SELECT Material_Number,
           CONCAT(Date_Type, '_', FORMAT(Snapshot_Date, 'yyyyMM')) AS Pivot_Col,
           Plan_Date
    FROM YourTableName
) AS SourceData
PIVOT (
    MAX(Plan_Date)  -- 用MAX聚合,因为每个组合唯一
    FOR Pivot_Col IN ([BOM_202301], [EOM_202301], [BOM_202302], [EOM_202302])
) AS PivotResult;

如果日期范围不固定,可使用动态SQL自动生成列名列表。

方案B:用CASE WHEN(更灵活,无需PIVOT函数)

直接通过条件判断生成目标列,适合固定日期范围的场景:

SELECT Material_Number,
       MAX(CASE WHEN Date_Type='BOM' AND FORMAT(Snapshot_Date,'yyyyMM')='202301' THEN Plan_Date END) AS BOM_202301,
       MAX(CASE WHEN Date_Type='EOM' AND FORMAT(Snapshot_Date,'yyyyMM')='202301' THEN Plan_Date END) AS EOM_202301,
       MAX(CASE WHEN Date_Type='BOM' AND FORMAT(Snapshot_Date,'yyyyMM')='202302' THEN Plan_Date END) AS BOM_202302,
       MAX(CASE WHEN Date_Type='EOM' AND FORMAT(Snapshot_Date,'yyyyMM')='202302' THEN Plan_Date END) AS EOM_202302
FROM YourTableName
GROUP BY Material_Number;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:12:25