0

主キー ID と 2 つの列 Order と Status を持つテーブルがあります。Status の値は、「A」、「P」、「S」、「O」、または「C」のいずれかです。ステータスが「A」または「C」のみの Order の値を見つける必要があります。それを行う SQL クエリをどのように作成すればよいですか? 私はいくつかの基本的な SQL を知っていますが、それを使用して結果を得ることができません。

サンプルテーブル:

ID  Order   Status

1   1234    A

2   2343    P

3   4351    S

4   8675    C

5   9867    A

6   9867    C

7   1234    A

8   2343    A

Expected result:

1234

8675

9867
4

2 に答える 2

4
select distinct t.[Order]
from Table1 as t
where
    not exists
    (
         select * from
         Table1 as t2 where t2.[Order] = t.[Order] and t2.Status not in ('A', 'C')
    )

また

select t.[Order]
from Table1 as t
group by t.[Order]
having
    sum(case when [Status] in ('A', 'C') then 1 else 0 end) = count(*)

また

select distinct t.[Order]
from Table1 as t
where
    t.[Order] not in (select t2.Order from Table1 as t2 where t2.Status not in ('A', 'C'))

詳細については、 SQL フィドルの例を参照してください

ところで、Order列に最適な名前ではありません。列名としてキーワードを使用しないでください

于 2013-08-10T07:38:38.780 に答える
4

EXCEPT多くの SQL データベースでは、 (Oracle では、MINUS)を使用するのは非常に簡単です。

SELECT [Order] FROM Table1
EXCEPT
SELECT [Order] FROM Table1 WHERE Status NOT IN ('A','C')

SQLフィドル

MySQL (特に を持たないMINUS) では、より古典的なものを使用する必要があります。

SELECT DISTINCT `Order` FROM Table1 WHERE `Order` NOT IN 
    (SELECT `Order` FROM Table1 WHERE `Status` NOT IN ('A','C'))
于 2013-08-10T07:46:48.410 に答える