从以下三个表中,我需要:
- 为 People 中的每条记录返回一行,如果他们有多个关联联系人,则不要复制该人。
- 包括关联的 ContactValue,其中 ContactType 为 HOMEPHONE,日期范围的开始时间早于现在,日期范围的结束时间晚于现在或为空。如果一个人没有家庭电话,仍然显示该人,但显示 NULL 作为 ContactValue 的值。
人们
PersonId (PK, int)
全名 (nvarchar)
人员联系方式
PersonId (PK, int)
ContactId (PK, int)
StartValidDate (PK, datetime)
EndValidDate (datetime, null)
联系人
ContactId (PK, int)
ContactType (nvarchar)
ContactValue (nvarchar)
People表包含唯一的人员列表 。PeopleContacts可能包含每个人、不同联系人类型的多个联系人关联,以及联系人适合的日期范围。 联系人包含特定类型的联系人值列表。例如,“WORKPHONE”的 ContactType 和“(555) 555 5555”的 ContactValue。
要求:
- 为 People 中的每条记录返回一行,如果他们有多个关联联系人,则不要复制该人。
- 包括关联的 ContactValue,其中 ContactType 为 HOMEPHONE,日期范围的开始时间早于现在,日期范围的结束时间晚于现在或为空。如果一个人没有家庭电话,仍然显示该人,但显示 NULL 作为 ContactValue 的值。
如果 People 包含三行,其中:
1 Jones, Bob
2 Smith, Bob
3 Smith, Fred
PeopleContacts 包含四行,其中:
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
并且联系人包含四行,其中:
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
Jones,Bob 与联系人有关联,但它与 WORKPHONE 关联,因此 ContactValue 应为 NULL。Smith, Bob 与两条 HOMEPHONE 记录有关联,但只有一条 (666) 666 6666 仍然具有有效的日期范围。Smith, Fred 与 HOMEPHONE 和 WORKPHONE 都有关联。