2017-02-14 26 views
0

在我的T-SQL數據庫返回列1,我有一個ItemLocation表。它列出了倉庫,存儲位置倉庫,存儲在這些位置的項目,手頭上目前數量。見下面 -只有2列包含全零

enter image description here

倉庫(倉庫),可以有多個位置,和位置可以有多個項目。正如你從圖片中看到的那樣,位置中有'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應該=「0」,但我不希望qty_on_hand等於「0」,因爲那將返回有沒有庫存項目的每個位置。我無法弄清楚我的查詢在這種情況下會是什麼樣子。

+0

你有一個倉庫表?如果是這樣,你需要使用它作爲你的基礎表。 – bernie

+0

bernie是的,我願意。 –

回答

1

假設數量只能是0或正值,則可以使用聚合以發現該位置最大值爲0。

select loc 
from itemloc 
group by loc 
having max(qty) = 0 

,如果它可以是負數太,然後用分,以及:

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; 
+0

對不起,遲到的迴應 - 必須離開我的辦公桌。通過具有max(qty)= 0的loc進行分組。感謝您的幫助。 –

+0

@Anthony很高興幫助。 – GurV

1

您可以創建具有qty_on_hand> 0(對任何項目)任何whse/location組合的一個子集,並返回未包括在該子集的結果。

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