2017-11-01 6 views
0

テーブル全体で対応する列の値が一致する列のエントリの数を取得するためのクエリを作成しようとしています。対応する値を持つ列の数を見つけるためのSQLクエリの作成

、明確例えば人物、それらを連絡するための方法、および連絡先の詳細

|PERSON_ID | CONTACT_TYPE | CONTACT_DETAIL| 
| 1  | PHONE  | 123-4567  | 
| 2  | FAX   | 234-5678  | 
| 1  | FAX   | 345-6789  | 

のこのテーブルを取るために、私は電話番号Xを持っている人の数を見つけたいと言うことができますおよびFAX番号y。これを行う方法はありますか?

+1

はいあります。あなたがこれまでに試したことを投稿してください。あなたの質問を修正するのをお手伝いします。 –

答えて

0

私の提案は、電話機用とFAX用のテーブルを自己結合することです。

SELECT count(DISTINCT t1.PERSON_ID) --DISTINCT is to handle duplicates 
FROM table_name t1, table_name t2 
WHERE t1.PERSON_ID=t2.person_ID 
AND t1.CONTACT_TYPE='PHONE' 
AND t1.CONTACT_DETAIL=X --your search for PHONE 
AND t2.CONTACT_TYPE='FAX' 
AND t2.CONTACT_DETAIL=Y; --your search for FAX 
+0

これは完璧に働いた、ありがとう – kmaster

0

一つの方法は、人のIDを取得するために凝集を使用することです:

select person_id 
from t 
where (contact_type, CONTACT_DETAIL) IN (('PHONE', X), ('FAX', Y)) 
group by person_id 
having count(*) = 2; -- assumes no duplicates 

全体のカウントを取得するには、サブクエリを使用します。人は2つの電話番号やファックスを持っていることができれば

select count(*) 
from (select person_id 
     from t 
     where (contact_type, CONTACT_DETAIL) IN (('PHONE', X), ('FAX', Y)) 
     group by person_id 
     having count(*) = 2 
    ) p; -- assumes no duplicates 

を上記のクエリでcount(*)の代わりにcount(distinct contact_type)を使用してください。

+1

2番目のクエリでは、DISTINCTを使用できます。 –

+0

人が2つの異なる電話番号を持っているときの座席はいかがですか?リクエストは電話番号とファックスです。 – mikcutu

関連する問題