如何为SQL Server的PIVOT查询添加另一组数据汇总
解决SQL Server PIVOT多区间汇总问题
你的问题核心在于子查询中没有生成用于区分不同LINE_NUM区间的分组字段,导致两个区间的数据被合并汇总成了一行。以下是修正后的方案:
修正后的查询代码
SELECT PRVDR_NUM, LINE_NUM_RANGE, [2020], [2019], [2018], [2017], [2016], [2015] FROM ( SELECT ITM_VAL_NUM, YR, PRVDR_NUM, -- 用CASE语句给每个LINE_NUM分配对应的区间标签 CASE WHEN LINE_NUM BETWEEN '00100' AND '02399' THEN '00100-02399' WHEN LINE_NUM BETWEEN '03000' AND '04699' THEN '03000-04699' END AS LINE_NUM_RANGE FROM dbo.newfile WHERE PRVDR_NUM = '410007' AND WKSHT_CD = 'B000001' AND CLMN_NUM = '00000' -- 用括号确保OR的逻辑优先级正确 AND ( LINE_NUM BETWEEN '00100' AND '02399' OR LINE_NUM BETWEEN '03000' AND '04699' ) ) t PIVOT( SUM(ITM_VAL_NUM) FOR YR IN ([2020], [2019], [2018], [2017], [2016], [2015]) ) AS pivot_table;
关键改动说明
- 新增区间分组字段:通过
CASE语句将单个LINE_NUM映射到对应的区间名称(LINE_NUM_RANGE),这是实现按区间分行汇总的核心。 - 修正WHERE逻辑:将区间判断用括号包裹,避免因
AND优先级高于OR导致的逻辑错误,同时简化了重复的过滤条件。 - 明确输出字段:指定要展示的字段,避免PIVOT后出现冗余列。
预期结果
| PRVDR_NUM | LINE_NUM_RANGE | 2020 | 2019 | 2018 | 2017 | 2016 | 2015 |
|---|---|---|---|---|---|---|---|
| 410007 | 00100-02399 | 8463 | 4180 | 570 | 888 | ||
| 410007 | 03000-04699 | number | number | number | number | number | number |
内容的提问来源于stack exchange,提问作者user2274742
相关产品推荐
相关产品推荐

