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'
)
在我的 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'
)