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

SQL Server GROUP BY分组时合并INFO为Heating实现正确聚合

SQL Server INFO类型映射Heating后聚合结果拆分修复方案

问题根因

返回拆分记录、聚合值不对的核心原因有两点:

  • GROUP BY 用了原始表的[Component Type]字段分组,没有和SELECT中定义的类型映射逻辑保持一致,原始值为INFO、Heating的记录即使最终显示为同一个Heating值,也会被判定为不同分组
  • GROUP BY 额外加入了[component description]维度,同类型下不同描述的记录会被拆成独立行,无法实现按映射后组件类型+年度的整体聚合

修复后代码

查询输出列的顺序、列名和原语句完全一致,可直接替换原有片段接入外层UNION ALL大查询,无需修改其他关联逻辑:

SELECT 
    CASE WHEN [Component Type] = 'INFO' 
         THEN 'Heating' 
         ELSE [Component Type] 
    END AS [Component Type],
    COUNT([PLACE-REF]) AS Grand_Total,  
    SUM(TotalCost) AS Grand_Total_Cost, 
    ProgYear 
FROM ABP_BUILD.dbo.ABP_AssetsComponentCostSummary 
WHERE Repeating = 1
  AND [Component Type] IN ('Heating','INFO')
  AND [component description] NOT IN (
      'Electric Panel Heaters ',
      'Electric Storage Heaters',
      'Electric Heating',
      'Electric Boiler',
      'Gas - Boiler'
  ) 
GROUP BY 
    CASE WHEN [Component Type] = 'INFO' 
         THEN 'Heating' 
         ELSE [Component Type] 
    END,
    ProgYear

代码说明:将原语句两个独立的[component description] NOT IN条件合并为一个,逻辑完全等价,执行效率更高。

效果说明

执行后返回结果完全匹配预期:

  • 2029年Heating类型聚合值为Grand_Total=2034、Grand_Total_Cost=5883760,是原拆分的两条记录数值之和
  • 2030年Heating类型的聚合结果保持原有数值不变
  • 输出结构和原查询完全兼容,不会影响外层UNION ALL的拼接逻辑

如果后续需要同时展示组件描述维度的明细聚合,不要直接在当前查询的GROUP BY中加回[component description]字段,否则会再次出现拆分问题,需要先通过子查询按类型+年度预聚合得到合计值,再关联明细字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:24:24