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

SQL透视时忽略CreatedDate列但需在查询结果中包含该列

解决SQL透视时包含非透视列的问题

给你两个可行的解决方案,根据你的数据情况选择:

方案一:透视后关联原表获取CreatedDate

先完成透视逻辑,再通过col1关联原表,同时对CreatedDate做聚合(避免同一col1返回多条记录):

SELECT piv.col1, piv.Jan, piv.Feb, piv.Mar, piv.Apr, piv.May, piv.Jun,
       piv.Jul, piv.Aug, piv.Sep, piv.Oct, piv.Nov, piv.Dec,
       -- 按需求选聚合方式,比如取该col1对应的最新时间戳
       MAX(t.CreatedDate) AS CreatedDate
FROM (
    SELECT col1, col2, Month 
    FROM @TempTable
) d
PIVOT (
     MAX(col2)
     FOR Month IN ([1], [2], [3],[4],
                   [5], [6],[7], [8], 
                   [9],[10], [11], [12])
) piv
JOIN @TempTable t ON piv.col1 = t.col1
GROUP BY piv.col1, piv.Jan, piv.Feb, piv.Mar, piv.Apr, piv.May, piv.Jun,
         piv.Jul, piv.Aug, piv.Sep, piv.Oct, piv.Nov, piv.Dec

方案二:子查询中用窗口函数聚合CreatedDate

如果同一col1对应的CreatedDate是唯一的,或者可以通过窗口函数快速确定唯一值,直接在子查询里处理,避免透视时拆分记录:

SELECT col1, Jan, Feb, Mar, Apr, May, Jun,
       Jul, Aug, Sep, Oct, Nov, Dec, CreatedDate
FROM (
    SELECT col1, col2, Month,
           -- 窗口函数按col1分组,取该组的CreatedDate(这里用MAX,也可以用MIN/FIRST_VALUE)
           MAX(CreatedDate) OVER (PARTITION BY col1) AS CreatedDate
    FROM @TempTable
) d
PIVOT (
     MAX(col2)
     FOR Month IN ([1], [2], [3],[4],
                   [5], [6],[7], [8], 
                   [9],[10], [11], [12])
) piv
GROUP BY col1, Jan, Feb, Mar, Apr, May, Jun,
         Jul, Aug, Sep, Oct, Nov, Dec, CreatedDate

适用场景说明

  • 方案一适合同一col1下有多个不同CreatedDate,需要明确指定聚合规则(比如取最新、最早)的情况;
  • 方案二适合同一col1下CreatedDate唯一,或者不需要复杂聚合的场景,执行效率相对更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:33