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

存储过程中临时表按DESCR分组,合并CHG与LATEFEE值的方法

问题描述

我正在开发一个存储过程,需要修改临时表以根据特定条件输出数据。该存储过程较为复杂,包含约40列,但当前需求仅需按DESCR列对记录分组,其余37列值均一致,不会造成问题。请问如何按DESCR分组并合并CHG和LATEFEE的值?

当前查询大致如下:

SELECT [columns1], [column38], t.descr, t.chg, t.lateFee, (t.chg + t.lateFee) as Total
FROM #tmpStatement t
    INNER JOIN dbo.Association a ON t.AssocID = a.AssocID
    INNER JOIN dbo.Company c ON a.CompanyID = c.CompanyID
GROUP BY
  [all columns]

若从GROUP BY子句中移除t.chg或t.lateFee列,SQL会提示这些列在SELECT列表中无效,因未包含在GROUP BY中,但我仍需保留这些列的合并后的值。

当前表输出结果:

DESCR      CHG   LATEFEE    TOTAL
=================================
Assessment  1       0         1
Spec        0       2         2
Spec        3       0         3
Assessment  0       5         5
Res         3       0         3

期望得到的结果:

DESCR      CHG   LATEFEE    TOTAL
=================================
Assessment  1       5         6
Spec        3       2         5
Res         3       0         3
解决方案

要实现按DESCR分组并合并CHG和LATEFEE的值,核心是对这两列使用聚合函数求和,同时处理好其余37列的分组逻辑:

修改后的查询示例如下:

SELECT 
    -- 替换为实际的37列名,或用MAX()包裹(因列值一致,结果不受影响)
    [column1], [column2], ..., [column38],
    t.descr,
    SUM(t.chg) AS CHG,
    SUM(t.lateFee) AS LATEFEE,
    SUM(t.chg + t.lateFee) AS Total
FROM #tmpStatement t
    INNER JOIN dbo.Association a ON t.AssocID = a.AssocID
    INNER JOIN dbo.Company c ON a.CompanyID = c.CompanyID
GROUP BY
    [column1], [column2], ..., [column38], t.descr

关键说明

  • 聚合函数求和:SUM(t.chg)和SUM(t.lateFee)会自动将同一DESCR分组下的对应列值累加,正好满足合并需求。
  • GROUP BY处理:由于其余37列值完全一致,将它们加入GROUP BY子句不会破坏分组逻辑,同时能避免SQL报错。如果列太多不想逐个罗列,也可以对这些列使用MAX()(如MAX([column1]) AS column1),此时GROUP BY只需保留t.descr即可——因为列值相同,MAX()的结果和原值完全一致。
  • Total列计算:SUM(t.chg + t.lateFee)与SUM(t.chg) + SUM(t.lateFee)结果等价,可任选一种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:55:15