2012-03-09 15 views
1

私がやりたいことは、単純に聞こえるが、それは理解できない。私は、report_numberフィールドとreport_typeフィールドを持つテーブルを持っています。 report_numberフィールドには、同じ「レポート番号」とreport_typeフィールドを含めることができます。私は何が必要なのかをよりよく説明するためにいくつかのデータを提供します。同じテーブル内で一致しないレコードを選択する - SQL

report_number report_type 
1     A 
2     A 
2     B 
1     A 
3     A 
3     A 
3     A 
4     C 
4     C 

「A」というレポートは照会する必要がありますが、レポートタイプBも関連付けられているSAMEレポート番号は照会する必要があります。私が得たい結果は、レポート#1と3です。

レポート番号は、それに関連付けられた異なるreport_typeを持つことができます。

ありがとうございます!

+0

言い換え:また、「B」には表示されません。「A」に表示されるすべてのreport_number値を必要としています。 – Griffin

+0

Griffinは言ったのですか、それともReport_Type "A"を持つすべてのレポート番号を必要としますか? 4/Cのサンプルレコードのポイントが何であるかは不明です。 –

答えて

3

試してみてください。

select distinct(report_number) 
from reports 
where report_type='A' and report_number not in (select report_number from reports where report_type='B') 
+1

+1これは私の好きな解決策です。 – Griffin

+1

ありがとうございます!...とてもシンプルで完璧に動作します! – user1212436

0
SELECT DISTINCT a.Report_Number 
FROM YourTable a 
     LEFT JOIN YourTable b 
      ON a.Report_Number = b.Report_Number 
        AND a.Report_Type <> b.Report_Number 
        -- OPTIONAL 
        AND b.Report_Type = 'B' 
WHERE b.Report_Type IS NULL 
-- OPTIONAL 
AND a.Report_Type = 'A' 

EDIT

は、これまで3つのソリューションは異なるアプローチを採用し、すべて掲載されています。あなたのRDBMSに合ったものを確認するには、Linkをチェックしてください。

+0

Where句でエラーが発生します – Diego

+0

@DiegoこれをテストするRDBMSは何ですか?これは、SQL Server、MySQL、Postgresql、およびOracleで動作します。これを見てください[SQl Fiddle](http://sqlfiddle.com/#!3/3d01c/1) – GarethD

関連する問題