以前に尋ねられた別の質問から使用しているクエリで問題が発生しました。その質問に追加したくなかったので、新しい質問を始めたところです。このシナリオは、SQL Server 2008 を使用しています。
Order Number Order Line Package Part Number Size Cost Reviewed
0001 1 1 A1 S 22.5 Yes
0001 1 1 B2 M 33.1 Yes
0001 1 1 C3 L 11.2 Yes
0001 1 2 A1 XL 15.0 Yes
0001 1 3 A2 M 12.0 Yes
0001 2 1 D1 S 42.9 Yes
0002 1 1 B4 L 72.5 No
0002 1 2 A7 XXL 66.7 No
0002 2 1 C1 XL 11.8 Yes
0002 2 1 B1 S 22.3 Yes
0003 1 1 A1 L 55.2 Yes
注文番号、注文明細、およびパッケージを選択したいと思います。部品番号、サイズ、コスト、およびレビュー済みかどうかで検索する必要があります。このテーブルには約 30,000 件の注文があるため、複数の結果が得られます (これが必要です)。パッケージ <> 1 のオーダー ラインを含む結果を除外する必要があります。つまり、パッケージ <> 1 のオーダー ラインのインスタンスは必要ありません。オーダーは複数の行に分割され、それぞれが複数の行に分割されます。行には、複数のパッケージを添付できます。以下は、正しく機能するクエリです。
SELECT
ORDERNumber,
ORDERLine,
Package
FROM
orders a
WHERE NOT EXISTS (SELECT *
FROM orders AS b
WHERE a.ordernumber = b.ordernumber
AND a.orderline = b.orderline
AND b.Package <> 1)
GROUP BY
ORDERNumber,
ORDERLine,
Package
上記の例のクエリの結果は次のとおりです(私の要件を正しく満たしています)...
ORDERNUMBER ORDERLINE PACKAGE
0001 2 1
0002 2 1
0003 1 1
複数の条件を追加しようとすると、私が抱えている問題が発生します。例えば...
SELECT
ORDERNumber,
ORDERLine,
Package
FROM
orders a
WHERE (REVIEWED = 'Yes' AND SIZE = 'L') OR (REVIEWED = 'Yes' AND SIZE = 'S')
AND NOT EXISTS (SELECT *
FROM orders AS b
WHERE a.ordernumber = b.ordernumber
AND a.orderline = b.orderline
AND b.Package <> 1)
GROUP BY
ORDERNumber,
ORDERLine,
Package
次の結果が得られます(これは私の要件を満たしていません)...
ORDERNUMBER ORDERLINE PACKAGE
0001 1 1
0001 2 1
0002 2 1
0003 1 1
注文番号 0001、注文明細 1 は、パッケージの値が 2 と 3 であるため無効です。条件の順序に問題があるように見えますか? これらの条件をいじってみましたが、望む結果が得られません。これは 2 つの個別のクエリと UNION ステートメントで実行できることはわかっていますが、このシナリオで 1 つのクエリだけで複数の条件を実行する方法はありますか? ありがとう。