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

如何仅返回所有同Docnum记录Qty均非零的单条记录?

解决方案:筛选所有Qty均不为0的Docnum

嘿,这个需求很典型,我给你分享几种实用的SQL写法,都能精准得到你想要的Docnum 220和222:

方法一:使用NOT EXISTS子查询

这是最常用也最直观的写法之一,核心思路是找出不存在任何Qty=0记录的Docnum:

SELECT DISTINCT Docnum
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.Docnum = t1.Docnum
      AND t2.Qty = 0
);
  • DISTINCT用来去重,确保每个Docnum只返回一次
  • NOT EXISTS会针对每个Docnum检查:有没有属于它的Qty=0的记录?没有的话就保留这个Docnum

方法二:GROUP BY + HAVING筛选

通过分组统计来排除包含Qty=0的Docnum:

SELECT Docnum
FROM your_table
GROUP BY Docnum
HAVING SUM(CASE WHEN Qty = 0 THEN 1 ELSE 0 END) = 0;
  • 按Docnum分组后,用CASE语句统计每个组里Qty=0的记录数
  • HAVING SUM(...) = 0表示这个组里没有任何Qty=0的记录,符合要求
  • 这种写法不需要DISTINCT,因为GROUP BY本身就会返回唯一的Docnum值

方法三:使用EXCEPT(部分数据库支持)

如果你的数据库支持EXCEPT关键字(比如SQL Server、PostgreSQL、MySQL 8.0+等),可以用集合差来实现:

SELECT DISTINCT Docnum FROM your_table
EXCEPT
SELECT DISTINCT Docnum FROM your_table WHERE Qty = 0;
  • 先获取所有存在的Docnum,再减去那些包含Qty=0的Docnum,剩下的就是符合条件的结果

小提示

  • 如果你的Qty字段可能出现负数,不要用HAVING MIN(Qty) > 0,因为负数虽然不为0,但MIN会小于0,会误判
  • 给Docnum和Qty字段建立索引的话,能大幅提升这些查询的性能

内容的提问来源于stack exchange,提问作者A. Ascanio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:59:33