首页 > 解决方案 > 从 SQL Server 中具有两个链接表的表中提取多行

问题描述

我有一个表,我们称它为Casecase 表,其中包含有关案例的基本信息,例如CaseNumberCaseOwner

在第二个表中CasePersons,保存了与特定案例编号相关的个人的详细信息。这包括PersonIdFirstName。链接到通过.LastNameCasePersonsCaseCaseNumber

在第三个表中,ContactDetails存储了与特定人相关联的多个电话号码。其中的TypeContactDetails代表电话号码的类型,例如家庭、手机或工作。ContactDetails链接到CasePersons通过PersonId

更清楚:

Case
------------------------
CaseNumber     CaseOwner
1              Owner1
2              Owner2
3              Owner3

CasePersons
---------------------
PersonId        CaseNumber      FirstName     LastName
1               1               Bob           Person
2               1               Jim           Human
3               2               Gary          Man
4               3               Pete          Smith
5               3               Matt          Jones


CaseDetails
-------------------------
PersonId       Detail        Type
1              0123456789    1
1              1111111111    2
2              2222222222    1
1              0101001011    3
2              1234123412    2
3              0000011111    1
3              1231231231    2

我希望能够编写一个查询,该查询可以提取案件的基本细节,以及与案件相关的所有个人和所有相关的电话号码。

我将如何构造一个查询来提取这些信息?我似乎无法在 Google 上找到这方面的信息,因为我不确定要搜索什么。

这样做的重点是,我可以找到特定案例的所有相关号码并将它们存储在一个位置。

预期产出

CaseNumber    CaseOwner    Person1FirstName     Person1LastName     Person1HomeNumber    Person1MobileNumber     Person1WorkNumber     Person2FirstName     Person2LastName     Person2HomeNumber    Person2MobileNumber     Person2WorkNumber  
1             Owner1       Bob                  Person              0123456789           1111111111              0101001011            Jim                  Human               2222222222           1234123412

标签: sqlsql-server

解决方案


如果您对一个案例的所有信息显示在多行中没有问题,您可以使用多个连接和 order by 将相关行放在一起。

select
    Case.CaseNumber
    ,CaseOwner
    ,CasePersons.PersonID
    ,FirstName
    ,LastName
    ,Detail
    ,Type
from
    Case
    join CasePersons
    on Case.CaseNumber=CasePersons.Casenumber
    join CaseDetails
    on CasePersons.PersonID=CaseDetails.PersonID
Order by
    Case.CaseNumber
    ,CasePersons.PersonID

推荐阅读