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

如何使用SQL PIVOT将日期显示为行 解决查询返回NULL问题

问题根因

PIVOT 运算默认会将源查询中除聚合函数用到的列、FOR子句指定的待转列之外的所有列作为分组依据。你当前的源查询仅包含三个列:siteid(待转列)、CreatedDate(聚合列)、ProjectNum,而WHERE条件已经固定了ProjectNum为唯一值,因此分组键只有一个固定值,所有聚合结果都会挤在同一行,没有匹配数据的siteid列就会返回NULL。

调整方案

如果需要将不同的日期拆分到对应行展示,只需在源查询中增加行号作为额外的分组键即可,调整后代码如下:

select * from
(
SELECT 
m.siteid,
d.CreatedDate,
m.ProjectNum,
-- 新增行号作为分组键,同siteid下按日期排序编号
ROW_NUMBER() OVER(PARTITION BY m.siteid ORDER BY d.CreatedDate) as rn
FROM DWCorp.SSMaster m 
INNER JOIN DWCorp.SSDetail d ON d.MasterId = m.Id WHERE m.ProjectNum = 'OJER00025' and d.ActionId = 7
)as Sourcetable
pivot
(
max(createddate)
for siteid in ([1],[2],[3],[4],[5])
) As pivottable 

如果不需要在结果中展示行号,只需将外层的select *改为指定需要返回的列即可:

select ProjectNum, [1],[2],[3],[4],[5] from
(
SELECT 
m.siteid,
d.CreatedDate,
m.ProjectNum,
ROW_NUMBER() OVER(PARTITION BY m.siteid ORDER BY d.CreatedDate) as rn
FROM DWCorp.SSMaster m 
INNER JOIN DWCorp.SSDetail d ON d.MasterId = m.Id WHERE m.ProjectNum = 'OJER00025' and d.ActionId = 7
)as Sourcetable
pivot
(
max(createddate)
for siteid in ([1],[2],[3],[4],[5])
) As pivottable 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:03