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

SQL中SUM与CASE结合按发票号renr分组求和异常问题排查

问题描述

我有一张e_auftragseingang表,包含字段:

  • artikelnummer(物料编号)
  • artikelbeschreibung(物料描述)
  • renr(发票号)

我需要通过CASE语句根据物料描述中的标识赋值:匹配ST#得2,匹配RT#得1,匹配PN#得3,否则为0。最终期望按相同的发票号renr对CASE结果分组求和,但当前得到的是全局总和而非分组后的结果。

示例数据

artikelnummerartikelbeschreibungrenr当前结果期望结果
1010REnr. 1234567234567800
0GN 2345678 #ST #1234567234567800
1234REnr. 123456723456782532

注:第一条记录因CASE语句的前置条件返回0。

当前SQL代码

CASE
WHEN THEN 
--  Until this point, everything is working.
SELECT  Sum(CASE
         WHEN Try_convert(
              int, [artikelnummer]) <> 0
              AND LEFT([artikelbeschreibung], 2) = 'GN' THEN 0
         WHEN Charindex('GN', [artikelbeschreibung]) > 0
              AND Charindex('ST#', [artikelbeschreibung]) > 0 THEN 2
         WHEN Charindex('GN', [artikelbeschreibung]) > 0
              AND Charindex('RT#', [artikelbeschreibung]) > 0 THEN 1
         WHEN Charindex('GN', [artikelbeschreibung]) > 0
              AND Charindex('PN#', [artikelbeschreibung]) > 0 THEN 3
         ELSE 0
                     END) AS result
          FROM   e_auftragseingang
          WHERE  [renr] =  e_auftragseingang.[renr]
问题原因与解决方法

问题根源

  1. 缺少分组语句:当前SQL没有GROUP BY renr,SUM函数会计算全表符合条件记录的总和,而非按每个renr单独分组计算。
  2. WHERE子句逻辑无效:WHERE renr = e_auftragseingang.renr是无意义的自关联条件,等同于没有过滤,会返回所有记录。
  3. 冗余语法错误:代码开头的CASE WHEN THEN属于无效语法,没有实际作用,需要移除。

修正后的SQL代码

SELECT 
    renr,
    Sum(CASE
         WHEN Try_convert(int, [artikelnummer]) <> 0 AND LEFT([artikelbeschreibung], 2) = 'GN' THEN 0
         WHEN Charindex('GN', [artikelbeschreibung]) > 0 AND Charindex('ST#', [artikelbeschreibung]) > 0 THEN 2
         WHEN Charindex('GN', [artikelbeschreibung]) > 0 AND Charindex('RT#', [artikelbeschreibung]) > 0 THEN 1
         WHEN Charindex('GN', [artikelbeschreibung]) > 0 AND Charindex('PN#', [artikelbeschreibung]) > 0 THEN 3
         ELSE 0
        END) AS result
FROM e_auftragseingang
-- 如需筛选特定发票号,可添加WHERE条件:WHERE renr = '2345678'
GROUP BY renr;

说明

  • 添加GROUP BY renr后,SUM会按每个发票号单独计算总和,得到分组后的期望结果。
  • 移除了无效的开头CASE语句和错误的WHERE条件,若需指定某一发票号,可按需添加WHERE renr = '目标发票号'。
  • 保留了原CASE语句的赋值逻辑,确保每条记录的规则不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:08:23