sql join父记录

时间:2015-09-21 16:50:53

标签: sql sql-server tsql sql-server-2008-r2

我有3个表ClientVisit,Location和连接表ClientVisitLocation 联接表包含访问位置的历史记录。

3个表的基本连接可以返回父记录或子记录。 如果记录是父级别,则位置表有一列[parentGuid],那么这= 0,否则它是父位置的guid。

将其置于上下文中,存储在clientVisitLocation表中的locationID可以引用Ward或Bed。我希望我的查询返回Ward

我第二次加入了位置表,但是这给了我l2的空列,其中l已经包含病房级别。我希望病房级别的位置出现在同一列中。

-+
| visitid | Locn1ID |   Locn1Name   | Locn1parent | locn2ID | Locn2Name | Locn2Parent |  |
+---------+---------+---------------+-------------+---------+-----------+-------------+--+
|       1 |       1 | ward F - bed2 |        1234 | 1234    | WardF     | NULL        |  |
|       1 |       2 | ward F - bed4 |        1234 | 1234    | WardF     | NULL        |  |
|       1 |       3 | Ward B        |           0 | NULL    | NULL      | NULL        |  |
+---------+---------+---------------+-------------+---------+-----------+-------------+--+

返回

+---------+---------+----------+
| visitid | Locn1ID | LocnName |
+---------+---------+----------+
|       1 |       1 | Ward F   |
|       1 |       2 | Ward F   |
|       1 |       3 | Ward B   |
+---------+---------+----------+

我希望它返回

{{1}}

我可以在select部分中使用coalesce,但因为这是一个更大的查询中的连接的一部分,它不会给我想要的结果。 我确信它相当简单,但我现在有一个心灵障碍。

2 个答案:

答案 0 :(得分:1)

关于日出的一个真正的快速说明是,地点的层次结构是不规则的。病房和床可能在树上有不同的距离,特别是在两个不同的校园之间。此外,有些地方不使用病房,有些使用单位,有些则使用诊所等......

这可能对您的需求有点过分,我创建了一个表函数来查找有关位置的一些其他信息。您可以使用下面的功能并加入您要查找的类型代码。

div#outer{
    height: 200px;
    width: 200px;
    background-color: tomato;
    overflow: hidden;
}

div#inner{
    height: 100px;
    width: 100px;
    background-color: lightgrey;
    opacity: 1;
    transition: all 1000ms;
}

div#outer.hide{
    width: 0;
    height: 0;

}

div#inner.hide{
     opacity: 0;
}

答案 1 :(得分:1)

试试这个:

SELECT 
    A.visitid,
    A.Locn1ID,
    CASE 
      WHEN A.Locn2Name is null THEN A.Locn1Name 
      ELSE A.Locn2Name
    END 
    FROM (Select cvl.*, l2.* from
cv3clientvisit cv
inner join CV3ClientVisitLocation cvl on cv.guid = cvl.clientvisitguid
inner join cv3Location l on CVl.locationguid = l.guid
left join cv3location l2 on l.locngrpguid = l2.guid) as A