次の 3 つのテーブルから、次のことを行う必要があります。
- People のレコードごとに 1 行を返します。複数の連絡先が関連付けられている場合は、その人物を複製しないでください。
- 関連付けられた ContactValue を含めます。ここで、ContactType は HOMEPHONE であり、日付範囲の開始は現在より前であり、日付範囲の終了は現在または null より後です。個人が自宅の電話を持っていない場合でも、その個人は表示されますが、ContactValue の値として NULL が表示されます。
人々
PersonId (PK、int)
FullName (nvarchar)
人連絡先
PersonId (PK、int)
ContactId (PK、int)
StartValidDate (PK、日時)
EndValidDate (日時、null)
連絡先
ContactId (PK、int)
ContactType (nvarchar)
ContactValue (nvarchar)
Peopleテーブルには、一意の人物リストが含まれています 。PeopleContactsには、各個人、さまざまな連絡先の種類、および連絡先が適している日付範囲の複数の連絡先の関連付けが含まれる場合があります。 Contactsには、特定のタイプの連絡先値のリストが含まれています。たとえば、「WORKPHONE」の ContactType と「(555) 555 5555」の ContactValue。
要件:
- People のレコードごとに 1 行を返します。複数の連絡先が関連付けられている場合は、その人物を複製しないでください。
- 関連付けられた ContactValue を含めます。ここで、ContactType は HOMEPHONE であり、日付範囲の開始は現在より前であり、日付範囲の終了は現在または null より後です。個人が自宅の電話を持っていない場合でも、その個人は表示されますが、ContactValue の値として NULL が表示されます。
People に 3 つの行が含まれている場合、次のようになります。
1 Jones, Bob
2 Smith, Bob
3 Smith, Fred
また、PeopleContacts には次の 4 つの行が含まれていました。
1 4 01/01/2012 NULL
2 1 01/01/2012 02/01/2012
2 2 02/02/2012 NULL
3 3 01/01/2012 NULL
3 4 01/01/2012 NULL
また、Contacts には次の 4 つの行が含まれていました。
1 HOMEPHONE (555) 555 5252
2 HOMEPHONE (666) 666 6666
3 HOMEPHONE (777) 777 7777
4 WORKPHONE (555) 555 5555
2012 年 2 月 2 日以降に実行した場合、正しいクエリからの出力は次のようになります。
FullName ContactValue
-------- ------------
Jones, Bob NULL
Smith, Bob (666) 666 6666
Smith, Fred (777) 777 7777
ジョーンズ、ボブは連絡先に関連付けられていますが、それは WORKPHONE に関連付けられているため、ContactValue は NULL である必要があります。Smith、Bob には 2 つの HOMEPHONE レコードへの関連付けがありますが、1 つの (666) 666 6666 だけが有効な日付範囲を持っています。Smith、Fred は、HOMEPHONE と WORKPHONE の両方に関連付けられています。