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

SQL Pivot表未返回预期结果,请求排查解决

问题排查与解决方案

核心问题

  1. 月份名称不匹配:原查询用datename(month, b.dDateCreated)返回的是完整英文月份名(如January、February),但Pivot子句里写的是月份缩写([Jan]、[Feb]),两者无法关联,只有May因完整名和缩写一致能正常统计,其他月份都返回0。
  2. 日期字段逻辑错误:需求是统计患者新增时间,但原查询用的是分支机构的创建日期b.dDateCreated,而非患者表的新增日期,这会导致统计逻辑完全偏离需求。

修正后的查询

select * from (
  -- 获取月份3位英文缩写,确保和Pivot列名匹配
  select left(datename(month, p.dDateCreated), 3) as [Month],
         b.sName as BranchName,
         datename(year, p.dDateCreated) as [Year],
         p.ipkPatientID 
  from Branch b
  inner join Patients p on p.ifkBranchID = b.ipkBranchID
  -- 筛选患者新增日期范围,而非分支机构创建日期
  where p.dDateCreated between '2020-01-01' and '2021-12-31 23:59:59.999'
) as Src
pivot(
  count(ipkPatientID)
  -- 修正Sept为Sep,匹配left(datename)的返回结果
  for [Month] in ([Jan], [Feb], [Mar], [Apr], [May], [Jun],
                  [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])
) as Pivot_Table
order by Year, BranchName;

关键修正说明

  • 月份格式统一:用left(datename(month, ...), 3)生成3位月份缩写,和Pivot子句中的列名完全对应;也可改用format(p.dDateCreated, 'MMM', 'en-US')更精准生成缩写。
  • 统计逻辑修正:替换日期字段为患者表的p.dDateCreated,确保统计的是患者新增时间对应的月份数据。
  • 修正月份缩写:将原Pivot中的[Sept]改为[Sep],匹配SQL Server返回的九月缩写格式。

验证步骤

  1. 单独执行子查询Src部分,确认[Month]列的值为Jan/Feb等3位缩写,且各月份均有数据。
  2. 执行完整透视查询,检查各分支机构、各年份的月度统计结果是否与源数据一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:05:23