2017-03-10 2 views
0

クエリを実行すると:2つの異なる行に値があるすべての部品番号を選択

SELECT PartNumber FROM Product_Options;

は、私はこのような結果が得られます。

enter image description here

私が本当に行う必要があることは、すべてのProduct_Optionsから選択ですOptionNameは= 'カテゴリー' AND OptionValue = 'KID'、OptionNameは= 'カテゴリー' AND OptionName = 'SKT'。 OptionNameはSAME行に値を持たなければなりません。

私は今、私は遠く離れて、ここでおそらくだが、私が試したクエリは、構文エラーになった:

SELECT製品型番Product_Options FROM WHERE OptionNameは= 'カテゴリー' AND OptionValue = 'KID'、OptionNameは= 'カテゴリー' AND OptionValue = 'SKT';

それは実際に働いていた場合は、上記のクエリが返す「CR5661」と他のPartNumbersはKIDとSKT

のOptionValueのOptionValueを持っていた方、私は、JOINを使用する必要があるかどうかわからないんだけど、アイデアカテゴリーがKIDで、カテゴリーが同じPartNumberを持つSKTであるすべての部品番号を選択することです。

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-veryを参照してください。 -simple-sql-query – Strawberry

答えて

1

OptionValueは、各PartNumberためのユニークであり、あなたが探しているだけの値にソースを制限するためにwhereを使用する場合は、count(distinct OptionValue)またはcount(*)を使用することができます。

select PartNumber 
from Product_Options 
where OptionName = 'Category' 
    and (OptionValue = 'KID' or OptionValue = 'SKT') 
group by PartNumber 
having count(distinct OptionValue)>1 
+0

このクエリは、OptionValue = 'KID'またはOptionValue = 'SKT'の場合、PartNumberを選択しますか? OptionValue = 'KID'とOptionValue = 'SKT'の場合、PartNumberを選択するだけです。 –

+1

@GTSJoe Right、 'having(distinct OptionValue)> 1'は、' 'KID''または' 'SKT''のうちの2つ以上を持つときだけ' 'PartNumber'を返すようにします。値が1より大きい場合は、少なくとも2つあり、両方の値を持つことを意味します。 – SqlZim

+0

非常に賢い、ありがとうSqlZim! :) –

関連する問題