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

SQL中如何让myDate既参与UNPIVOT又作为结果列输出?

解决方案

使用UNPIVOT实现需求

直接修改原查询,将myDate同时包含在子查询和逆透视的列列表中即可:

select myDate, Code, [Value]
from
( 
    select ProdId, ProdName, Category, AgeGroup, IsInternal, myDate 
    from dbo.iAudit
) p
unpivot
(
    Value for Code in (ProdId, ProdName, Category, AgeGroup, IsInternal, myDate)
) as unpvt

说明:

  1. 子查询中保留myDate字段,确保逆透视后的每条记录都能关联到原数据行的日期值,作为独立列输出。
  2. 在UNPIVOT的IN子句中加入myDate,让该字段也参与逆透视转换,生成一条Code='myDate'、Value为对应日期的记录。
  3. 最终结果里,每条逆透视记录都会带上原行的myDate,同时myDate自身也会作为一个Code条目出现在结果集中。

更灵活的替代方案(CROSS APPLY)

如果你的数据可能存在NULL值,或者需要更灵活的扩展,推荐使用CROSS APPLY结合VALUES子句的方式,这种写法不会过滤NULL值:

select 
    i.myDate,
    ca.Code,
    ca.Value
from dbo.iAudit i
cross apply (
    values
        ('ProdId', i.ProdId),
        ('ProdName', i.ProdName),
        ('Category', i.Category),
        ('AgeGroup', i.AgeGroup),
        ('IsInternal', i.IsInternal),
        ('myDate', i.myDate)
) ca(Code, Value)

说明:

  • 这种写法通过VALUES子句手动定义需要逆透视的列和对应的别名,逻辑更直观。
  • 无论列值是否为NULL,都会生成对应的记录,适合需要完整保留数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:32