使用字段筛选SQL Server中第二个字段上的选择

时间:2018-11-20 10:52:03

标签: sql sql-server

我有一个表ClientContacts,其中包含有关一对客户端的基本信息。该表中包含的一些详细信息包括P1TitleP2TitleP1FirstNameP2FirstName。对于此表中的每一行,可能会有一个或两个客户端的详细信息,其中CustomerId代表配对。该表中还包含ContactId,用于链接到下面描述的表。

在第二个表ContactDetails中,该表包含一些行,这些行包含与客户相关联的特定联系方式。每个客户端在此表中可能有许多行,每行包含不同的详细信息,例如HomeNumberMobileNumberEmail。该表还包含一个Type字段,该字段表示该行中保存的联系人详细信息的类型。 1 =家庭电话,2 =手机号码,3 =电子邮件。还包含Note字段,该字段可以包含MrMrs,表示所保留的移动电话号码在客户端配对中属于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

我不确定如何从这里继续。任何帮助将不胜感激。

0 个答案:

没有答案