我有一个表ClientContacts
,其中包含有关一对客户端的基本信息。该表中包含的一些详细信息包括P1Title
,P2Title
,P1FirstName
,P2FirstName
。对于此表中的每一行,可能会有一个或两个客户端的详细信息,其中CustomerId
代表配对。该表中还包含ContactId
,用于链接到下面描述的表。
在第二个表ContactDetails
中,该表包含一些行,这些行包含与客户相关联的特定联系方式。每个客户端在此表中可能有许多行,每行包含不同的详细信息,例如HomeNumber
,MobileNumber
和Email
。该表还包含一个Type
字段,该字段表示该行中保存的联系人详细信息的类型。 1 =家庭电话,2 =手机号码,3 =电子邮件。还包含Note
字段,该字段可以包含Mr
或Mrs
,表示所保留的移动电话号码在客户端配对中属于Person1还是Person2。
这是表格的视觉结构。
ClientContacts
CustomerId ContactId Person1Title Person1FirstName Person1LastName Person2Title Person2FirstName Person2LastName
1 100 Mr Bob BobLastname Mrs Bobette BobetteLastname
2 101 Mr John JohnLastname Mrs Johnette JohnetteLastname
ContactDetails
ContactId Detail Type Note
100 012345 1
100 077777 2 P1
100 012333 1
100 088888 2 P2
101 099999 1
101 012211 1
101 066666 2
101 email@email.com 3
我想构造一个查询,使我能够拉回这两个客户端的信息,并弄清存储在ContactDetails
表中的手机号码是否属于两个客户端中的任何一个,如果是的话,我需要能够确定配对中属于Person1还是Person2。
此外,如果特定手机号码(类型= 2)的note字段为null,则第一个手机号码应用于Person1,第二个手机号码应用于Person2。
下面是我想要的输出:
Output
CustomerId Person1Firstname
Person1Lastname Person2Firstname Person2Lastname Home Person1Mobile Person2Mobile Person2Email
1 Bob BobLastname Bobette BobetteLastname 012211 077777 088888 null
我有一个可以正常工作的查询,该查询设法提取移动电话号码并将其与P1或P2相关联,但是,只有在Note
字段不为null的情况下,这才有效。
select
cc.CustomerId,
cc.Person1Forename,
cc.Person1Surname,
cc.Person2Forename,
cc.Person2Surname,
max(case when cd.Type = 3 then cd.Detail end) as 'Home',
max(case when cd.Type = 4 and cd.Note = cc.P1Title then cd.Detail end) as 'Person1Mobile',
max(case when cd.Type = 4 and cd.Note = cc.P2Title then cd.Detail end) as 'Person2Mobile',
max(case when cd.Type = 5 then cd.Detail end) as 'Email'
from ClientContacts cc join
ContactDetails
cd on cc.ContactId = cd.ContactId
我不确定如何从这里继续。任何帮助将不胜感激。