Return 仅当第 2 列包含全零时,第 1 列

Return column1 only if column 2 contains all zeros

在我的 t-SQL 数据库中,我有一个 ItemLocation table。它列出了仓库、存储位置 仓库、存储在这些位置的项目以及当前手头数量。见下文-

一个仓库(whse)可以有多个库位,一个库位可以有多个项目。正如您从图像中看到的那样,位置中的某些项目具有“0”qty_on_hand。

我想做的是编写一个查询,其中只有 return 个绝对没有 qty_on_hand 的位置。例如,我图像中突出显示的位置 (01-00-00A) 不会出现在执行查询的结果集中,因为它包含 do 具有数量的项目。我只对没有任何商品数量的地点感兴趣。

SELECT  itemloc.*
FROM itemloc
WHERE itemloc.qty_on_hand = '0'
AND whse IN ('MW10','MW40','MW60')
ORDER BY whse, itemloc.loc

我的查询描述 qty_on_hand 应该 = '0',但我不希望 qty_on_hand 等于 '0',因为那样它会 return 每个具有没有库存的物品。我不太清楚我的查询在这种情况下会是什么样子。

假设数量只能为 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
        );

或window函数:

select *
from (
    select
        i.*,
        max(qty) over (partition by loc) max_qty
    from itemloc i
) t where max_qty = 0;

您可以创建任何 whse/location 组合的子集,其中 qty_on_hand > 0(对于任何项目),并且 return 结果未包含在那个子集。

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
SELECT  *
FROM    itemloc
WHERE
    loc IN
    (
        SELECT      loc
        FROM        itemloc
        GROUP BY    qty_on_hand
        HAVING      SUM(qty_on_hand) = '0'
    )