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

如何消除SQL分组查询中g.linkedline导致的多余结果?

解决SQL分组结果过多的问题

嘿,我完全懂你现在的困扰——明明只有2个产品,查出来却有20条结果,这肯定是分组维度出问题了!

问题根源

你当前的GROUP BY子句里包含了g.linkedline,这个字段应该是每条交易记录的唯一标识(或者同一个产品对应多个不同值),导致原本应该合并的itemcode + warehouse组合被拆分成了多个分组,结果条数自然就爆炸了。要解决这个问题,核心就是把g.linkedline从分组项里彻底移除。

修改后的查询语句

直接去掉GROUP BY中的g.linkedline,让聚合函数基于itemcode和warehouse这两个正确维度计算:

SELECT 
    i.itemcode, 
    g.warehouse, 
    Sum(g.aantal) AS Voorraad, 
    Max(CASE WHEN g.transtype = 'N' THEN g.sysmodified ELSE NULL END) AS LastDate 
FROM dbo.gbkmut AS g 
INNER JOIN dbo.items AS i 
    ON g.artcode = i.itemcode 
    AND g.reknr = i.glaccountdistribution 
    AND ( 
        g.transtype = 'N' 
        OR ( g.transtype = 'B' AND g.transsubtype = 'B' AND g.freefield1 NOT IN ( 'B', 'Q', 'W', 'K' ) AND g.blockitem = '0' AND g.allocationtype = 'F' ) 
        OR ( g.transtype = 'B' AND g.transsubtype = 'B' AND g.freefield1 = 'V' AND g.allocationtype = 'B' ) 
    ) 
WHERE 
    g.transtype = 'N' 
    AND ( i.itemcode = 'TESTARTIKEL' OR i.itemcode = 'IQ7-60-2-INT' ) 
GROUP BY 
    i.itemcode, 
    g.warehouse -- 移除了g.linkedline,确保分组维度正确

额外提示

  1. 你当前的WHERE子句里写了g.transtype = 'N',这会把JOIN条件里那些transtype = 'B'的记录全部过滤掉。如果你的意图是包含这些B类型交易来计算库存(Voorraad),那这个WHERE条件会导致计算结果不准确,得考虑移除它。
  2. 之前试的TOP 1只会返回第一条结果,当然不符合你要获取所有产品聚合数据的需求;嵌套查询如果没调整分组维度,也没法解决重复分组的问题,所以聚焦修改分组项才是关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:29:13