2017-12-12 4 views
-2

私は2つのテーブルを持っています:ReportとItem.TheyはreportIDカラムでリンクされています。 私がしようとしているのは、レポートのすべての項目が承認済みの状態ですが、却下された状態のすべてのレポートを選択することです。私は以下のクエリを実行しましたが、これは受け入れられた状態にある各項目の行を返していますが、私はアプリをチェックして、これらのレポートには却下された項目もあります。SQL Server 2016はselectで結果を除外します

select r.reportID 
from Report r with(nolock) 
inner join Item i with(nolock) 
    on r.reportid = i.reportid 
where 
    (conditions for report to be in rejected state) and 
    (conditions for items to be in approved state) 
+1

サンプルテーブルのデータと予想される結果を追加します。書式設定されたテキストで、画像ではありません。 – jarlh

+0

"レポートのすべての項目が**拒否されているにもかかわらず、却下された状態のすべてのレポートを選択します**レポートのすべての項目が**承認されていますが却下された状態のすべてのレポートを選択します**状態 "? –

+0

何か面倒な質問。ここに投稿する方法を見てください:https://stackoverflow.com/help/mcve –

答えて

2

レポートからすべてのアイテムが承認状態にあるが拒否状態にあるすべてのレポートに興味がある場合は

select r.reportID 
from Report r 
where r.state = 'rejected' and NOT EXISTS 
(
    select 1 
    from Item i 
    where r.reportid = i.reportid and i.state != 'approved' 
) 

次のようにNOT EXISTSを使用上記のコードは、項目のないレポートも返します。

+0

私はこれを理解していません: select 1 r.reportid = i.reportidのアイテムi これはどこの条件ですか? – 99LittleBugsInTheCode

+0

@ 99LittleBugsInTheCode true、修正されました。コピー+貼り付けエラー... :) –

関連する問題