SQL查询:如何筛选仅存在于AAA区域的物品数据?
解决方案
要筛选仅在AAA区域存在、未出现在其他区域的物品数据,你需要先找出那些仅关联AAA区域的物品,再获取它们的对应记录。以下是两种可行的SQL语句:
1. 获取原始明细记录
SELECT item, qty, area FROM MyTable WHERE item IN ( SELECT item FROM MyTable GROUP BY item -- 核心条件:该物品仅对应一个区域,且这个区域是AAA HAVING COUNT(DISTINCT area) = 1 AND MAX(area) = 'AAA' )
2. 按物品聚合AAA区域的数量(匹配你原查询的聚合需求)
SELECT item, COALESCE(SUM(qty), 0) AS AAA_qty FROM MyTable WHERE item IN ( SELECT item FROM MyTable GROUP BY item HAVING COUNT(DISTINCT area) = 1 AND MAX(area) = 'AAA' ) GROUP BY item
原查询问题分析
你之前的SQL只是按物品分组计算了AAA区域的数量,但没有过滤那些在其他区域也有记录的物品。通过子查询里的HAVING条件,我们可以精准筛选出仅存在于AAA区域的物品,再基于这些物品获取数据,就能得到预期的5678和4578的AAA区域记录。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

