2017-02-14 7 views
0

私のt-SQLデータベースには、ItemLocationテーブルがあります。倉庫、保管場所の倉庫、それらの場所に保管されている品目、および現在の数量がリストされています。下記参照 -カラム2にすべてのゼロが含まれている場合のみ、カラム1を返します

enter image description here

倉庫(whse)複数の位置を有することができ、位置が複数の項目を有することができます。画像からわかるように、場所には「0」のqty_on_handの項目があります。

私がしたいのは、絶対にqty_on_handのない場所だけを返すクエリを書くことです。たとえば、イメージ内の強調表示された場所(01-00-00A)は、実行されたクエリの結果セットには存在しません。これは、にはの数量を持つアイテムが含まれているためです。私は、どんなアイテムにも何の量もない場所だけに興味があります。

私のクエリはqty_on_handは=べき描い
SELECT itemloc.* 
FROM itemloc 
WHERE itemloc.qty_on_hand = '0' 
AND whse IN ('MW10','MW40','MW60') 
ORDER BY whse, itemloc.loc 

「0」が、私は同じにqty_on_handしたくない「0」、それは無在庫で項目を持っているすべての場所を返しますので。このような状況で私のクエリがどのように見えるかはわかりません。 :数量と仮定するとのみ、0または正の値にすることができ

+0

ウェアハウス・テーブルを持っていますか?もしそうなら、それをベーステーブルとして使用する必要があります。 – bernie

+0

bernieはい、あります。 –

答えて

1

それは同様分を使用し、その後、あまりにも否定することができた場合、その場所の最大値が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

あなたは> 0 qty_on_hand(任意の項目のための)を持っている任意の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' 
    ) 
関連する問題