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

在SQL Server Management Studio中如何对CASE语句内的两行数据求和

解决方案

核心思路

你现在返回的两行价格是因为同一个单据ID对应了两个物料清单条目,要合并求和只需要做两步:

  1. 先把CASE返回的字符串格式价格统一转换为数值类型(注意处理德式格式的逗号小数点)
  2. 用SUM()聚合函数按单据IDBelID分组,即可得到合并后的总价格

原有逻辑潜在问题提示

你现有代码第二个WHEN条件中的(KHKVKBelegePositionen.Artikelgruppe != '181' OR KHKVKBelegePositionen.Artikelgruppe != '182' OR KHKVKBelegePositionen.Artikelgruppe != '183')逻辑永远成立,无论物料组是什么值都会满足该条件,推测你实际需要的是「物料组不在181/182/183范围内」的逻辑,下面的代码已经用更简洁的NOT IN做了修正,你可以按需调整。

改写后求和查询

SELECT 
    SUM(
        -- 先把字符串价格转为数值,处理德式逗号小数点
        CAST(
            REPLACE(
                CASE
                    WHEN KHKVKBelegePositionen.StuecklistenTyp = '0'
                        THEN KHKVKBelegePositionen.Gesamtpreis
                    WHEN KHKVKBelegeStuecklisten.Gesamtpreis != '0,00' 
                         AND KHKVKBelege.A0Land != 'DE' 
                         AND KHKVKBelegePositionen.Artikelgruppe NOT IN ('181','182','183')
                         AND KHKVKBelegePositionen.StuecklistenTyp != '0'
                        THEN KHKVKBelegeStuecklisten.Gesamtpreis
                    WHEN KHKVKBelegePositionen.Artikelgruppe IN ('181','182','183')
                         AND KHKVKBelegePositionen.StuecklistenTyp != '0'
                        THEN KHKVKBelegeStuecklisten.Gesamtpreis
                    ELSE 
                        KHKVKBelegeStuecklisten.GesamtpreisInternEW
                END,
                ',', '.' -- 把德式逗号小数点替换为标准点格式
            ) AS DECIMAL(18,2)
        )
    ) AS Gesamtpreis_Sum
FROM 
    KHKVKBelegeStuecklisten (READUNCOMMITTED)     
INNER JOIN 
    KHKVKBelege ON KHKVKBelegeStuecklisten.Belid = KHKVKBelege.BElid    
INNER JOIN 
    KHKVKBelegePositionen ON KHKVKBelegeStuecklisten.BelID = KHKVKBelegePositionen.BelID
WHERE 
    KHKVKBelegePositionen.BelID = '3519582'
GROUP BY 
    KHKVKBelegePositionen.BelID

以上查询会直接返回你示例数据的求和结果16.32,可以直接用于后续更新操作。

批量更新参考示例

如果你需要批量更新所有单据的总价格,可以参考下面的写法:

UPDATE t
SET t.需要更新的总价格字段 = s.Gesamtpreis_Sum
FROM 你要更新的表 t
INNER JOIN (
    -- 去掉WHERE单ID限制即可批量计算所有单据的总价格
    SELECT 
        KHKVKBelegePositionen.BelID,
        SUM(
            CAST(
                REPLACE(
                    CASE
                        WHEN KHKVKBelegePositionen.StuecklistenTyp = '0'
                            THEN KHKVKBelegePositionen.Gesamtpreis
                        WHEN KHKVKBelegeStuecklisten.Gesamtpreis != '0,00' 
                             AND KHKVKBelege.A0Land != 'DE' 
                             AND KHKVKBelegePositionen.Artikelgruppe NOT IN ('181','182','183')
                             AND KHKVKBelegePositionen.StuecklistenTyp != '0'
                            THEN KHKVKBelegeStuecklisten.Gesamtpreis
                        WHEN KHKVKBelegePositionen.Artikelgruppe IN ('181','182','183')
                             AND KHKVKBelegePositionen.StuecklistenTyp != '0'
                            THEN KHKVKBelegeStuecklisten.Gesamtpreis
                        ELSE 
                            KHKVKBelegeStuecklisten.GesamtpreisInternEW
                    END,
                    ',', '.'
                ) AS DECIMAL(18,2)
            )
        ) AS Gesamtpreis_Sum
    FROM 
        KHKVKBelegeStuecklisten (READUNCOMMITTED)     
    INNER JOIN 
        KHKVKBelege ON KHKVKBelegeStuecklisten.Belid = KHKVKBelege.BElid    
    INNER JOIN 
        KHKVKBelegePositionen ON KHKVKBelegeStuecklisten.BelID = KHKVKBelegePositionen.BelID
    GROUP BY 
        KHKVKBelegePositionen.BelID
) s ON t.BelID = s.BelID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:54:00