2017-07-25 4 views
0

この質問に最も適した方法はわかりませんので、解決策を探すのは苦労しました。私は、特定の日にすべての注文を引き出すクエリを持っています。私は在庫が= Nのどこに注文があるのか​​知る必要があります。私はすべてのアイテムが目録= 'N'である注文を見つけるためにそれを探していません。それらのうちの少なくとも1つがある場合は、別の列に「Y」と言ってほしい。SQLクエリ注文時の部品が在庫切れの場合に通知する

select 
a.OrderNum, 
c.Inventory, 
case when c.inventory = 'n' then 'Y' else 'N' end as NonStock 
from orders a inner join orditems b on a.ordnum = b.ordnum inner join items 
c on b.code = c.code 
where a.OrderDate = '7/24/2017' 
group by a.OrderNum, c.Inventory 

これは私が思いついた元のコードです。私はこれが正しくないことを知っています。注文のアイテムのいずれかがc.inventory = 'N'である限り、NonStock列がYと言う場所と同様のもの(まったく異なる、全くわからない)が必要です。私はまったく正しい方向に進んでいますか?どんな指導も高く評価されます。

サンプルデータ:

a.OrderNum b.ItemNum c.Inventory 
123   3   Y 
123   4   N 
123   5   Y 
124   6   Y 
124   9   N 
124   8   Y 
125   11   Y 
125   13   Y 
125   15   Y 

所望の出力:

a.OrderNum NonStock 
123  Y 
124  Y 
125  N 

注文123及び124はc.inventoryでその上にアイテムを持っている= 'N' それらが上Nonstockとしてトリガを受けるため所望の出力。注文125にはすべてc.inventory = 'Y'の3つの項目がありますので、NonStockには 'N'が表示されます。

答えて

0

これは正しいですが、この目的ではCASEという表現を使用する必要がありますが、group byを使用する必要はありません。私はラインgroup by a.OrderNum, c.Inventoryを意味します。あなたの質問はちょうど

select OrderNum, max(NonStock) as NonStock 
from (
select 
a.OrderNum, 
c.Inventory, 
case when c.inventory = 'n' then 'Y' else 'N' end as NonStock 
from orders a inner join orditems b on a.ordnum = b.ordnum inner join items 
c on b.code = c.code 
where a.OrderDate = '7/24/2017') xxx 
group by OrderNum; 
+0

私はグループを使用しない場合、私は繰り返し注文番号を取得する必要があります。私の最終的な目標は、各注文のリストと、それにc.inventory = 'N'の項目があるかどうかを確認することです。その周りに別の方法がありますか? – Vexxums

+0

実際、私は考えていました。私が注文のすべての項目がc.inventory = 'Y'である場合、私はそれらについて心配する必要はなく、他のものは私が探しているものになることを知っています。それは理にかなっていますか? – Vexxums

+0

@Vexxums、yesはテーブル構造、サンプルデータ、および希望の出力を掲示しない限り言うことができません – Rahul

関連する問題