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

如何在Azure SQL中实现排除当前行的分组条件求和?

在Azure SQL中实现分组条件求和计算Desired列

需求说明

需要为现有数据表新增Desired列,计算规则如下:

  • 按ID2分组,针对每一行,计算组内满足Lower ≤ 当前行Lower且Upper ≥ 当前行Upper的所有Measurement字段总和
  • 用上述总和减去当前行的Measurement值,得到该行的Desired值

Excel中已通过公式=SUMIFS(F:F,B:B,B2,C:C,"<= "&C2,E:E,">= "&E2)-F2实现,现需在Azure SQL中用非循环方案完成相同逻辑。

输入表

ID1ID2LowerValueUpperMeasurement
210505038
210252520
2125255062
217.517.52543
2107.57.544
2207.57.544

预期结果表

ID1ID2LowerValueUpperMeasurementDesired
2105050380
21025252038
212525506238
217.517.5254358
2107.57.54458
2207.57.5440

Azure SQL实现代码

将以下代码中的YourTableName替换为你的实际表名即可:

SELECT 
    t.ID1,
    t.ID2,
    t.Lower,
    t.Value,
    t.Upper,
    t.Measurement,
    ISNULL(
        (SELECT SUM(t2.Measurement) 
         FROM YourTableName AS t2 
         WHERE t2.ID2 = t.ID2 
           AND t2.Lower <= t.Lower 
           AND t2.Upper >= t.Upper) - t.Measurement,
        0
    ) AS Desired
FROM YourTableName AS t
ORDER BY t.ID1, t.ID2, t.Value DESC, t.Lower;

代码说明

  1. 关联子查询:针对每一行,在同ID2分组内筛选出满足Lower ≤ 当前行Lower、Upper ≥ 当前行Upper的记录,计算这些记录的Measurement总和
  2. 减去当前行的Measurement值,得到Desired
  3. ISNULL函数处理无符合条件记录的情况(比如ID2=2的行,仅自身符合条件,总和减自身结果为0)
  4. 最后按照原表要求的排序规则返回结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:07:48