2016-06-01 2 views
1

私のテーブルには、このようなものです:私はこのケースでそのサブアイテムすべて完了しているアイテムを---選択したい面白いトリッキーなフィルタ(タイトルにそれを記述する方法がわからない)

Item Subitem Progress 
1  101  Complete 
1  102  Pending 
1  103  Pending 
2  201  Complete 
2  202  Complete 

、アイテム#2。どのようにそれを行うにはどのようなアイデア? ありがとう!

+2

、あなたは進歩<>「完全」で行が存在しないすべてのアイテムをしたいですか? –

+0

[SQL - 列Aのすべての値Xが値Bである行を取得する](http://stackoverflow.com/questions/31481213/sql-get-rows-where-all-values-x-of-column -a-value-b) –

答えて

5

非常に多くの方法:

select Item from T group by Item 
having min(Progress) = max(Progress) and max(Progress) = 'Complete' 

または

having count(case when Progress = 'Complete' then 1 end) = count(*) 
言い換えれば

または

having count(case when Progress = 'Complete' then null else 1 end) = 0 /* handles nulls */ 

または

select distinct Item from T t 
where 'Complete' = all (select Progress from T t2 where t2.Item = t.Item) 
+0

本当にありがとう!!!!!!それは天才です! –

2

だから、あなたは基本的にあなたが示されたテーブルは、サブアイテムテーブルであり、他のアイテムのテーブルがあると仮定すると、保留中の状態

のいずれかのサブアイテムを持っていないすべての項目を...したい

SELECT * 
FROM Items 
WHERE ITEMID NOT IN (SELECT ITEMID 
        FROM SubItems 
        WHERE Progress != 'Complete') 
+0

あなたはおそらく 'distinct'が必要です。 – shawnt00

+0

私はそれがメインの選択に必要とは思わない。私はそれがサブクエリでそれを持っていることがより効率的かもしれないと思う。 –

+0

アイテム2の2行が表示されます。 – shawnt00

関連する問題