在我的t-SQL数据库中,我有一个ItemLocation表。它列出仓库,仓库中的存储位置,存储在这些位置的物料以及当前的库存数量。见下文 -
仓库(whse)可以有多个位置,一个位置可以有多个项目。正如您从图像中看到的那样,有些地方的项目有' 0' qty_on_hand。
我想要做的是编写一个只返回绝对没有qty_on_hand的位置的查询。例如,我的图像中突出显示的位置(01-00-00A)将不会出现在执行查询的结果集中,因为它包含做具有数量的项目。我只对那些没有任何数量的商品感兴趣。
SELECT itemloc.*
FROM itemloc
WHERE itemloc.qty_on_hand = '0'
AND whse IN ('MW10','MW40','MW60')
ORDER BY whse, itemloc.loc
我的查询描述了qty_on_hand should =' 0',但我不希望qty_on_hand等于' 0',因为它会返回每个有项目的位置没有库存。我无法弄清楚我的查询对于这种情况会是什么样子。
答案 0 :(得分:1)
假设qty只能是0或正值,您可以使用聚合来查找该位置的最大值是否为0.
select loc
from itemloc
group by loc
having max(qty) = 0
如果它也可能是否定的,那么也使用min:
select loc
from itemloc
group by loc
having max(qty) = 0 and min(qty) = 0
如果您想获得其他列,也可以使用:
select *
from itemloc
where loc in (
select loc
from itemloc
group by loc
having max(qty) = 0
);
或窗口功能:
select *
from (
select
i.*,
max(qty) over (partition by loc) max_qty
from itemloc i
) t where max_qty = 0;
答案 1 :(得分:1)
您可以创建具有location
>的任何qty_on_hand
/ SELECT a.*
FROM itemloc a
LEFT JOIN (select distinct whse,location from itemloc where qty_on_hand <> '0') b
ON a.whse = b.whse
AND a.location = b.location
WHERE b.whse IS NULL
组合的子集0(对于任何项目),并返回该子集中未包含的结果。
{{1}}
答案 2 :(得分:0)
SELECT *
FROM itemloc
WHERE
loc IN
(
SELECT loc
FROM itemloc
GROUP BY qty_on_hand
HAVING SUM(qty_on_hand) = '0'
)