Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql联接父记录_Sql_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

sql联接父记录

sql联接父记录,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有3个表ClientVisit、Location和联接表ClientVisitLocation 联接表包含访问位置的历史记录 3个表的基本联接可以返回父记录或子记录。 位置表有一列[parentGuid],如果记录是父级,则该列为0,否则它是父位置的guid 要将其置于上下文中,clientVisitLocation表中存储的locationID可以引用病房或床。我要我的查询返回病房 我第二次加入了location表,但这给了我l2的空列,其中我已经包含了ward级别。我希望病房级别的位置显示

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

3个表的基本联接可以返回父记录或子记录。 位置表有一列[parentGuid],如果记录是父级,则该列为0,否则它是父位置的guid

要将其置于上下文中,clientVisitLocation表中存储的locationID可以引用病房或床。我要我的查询返回病房

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

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
返回

-+
| 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   |
+---------+---------+----------+
我可以在select部分中使用合并,但这是一个较大查询中连接的一部分,无法提供所需的结果。
我相信这相当简单,但我现在有一个思维障碍。

关于Sunrise的一个快速提示是位置的层次结构是参差不齐的。一个病房和一张床在树上可能有不同的距离,特别是在两个不同的校园之间。此外,有些地方不使用病房,有些使用单元,有些使用诊所等

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

CREATE FUNCTION [dbo].[XXX_WhereAmI](@Location Numeric(16,0))
RETURNS @locationDetails Table(
GUID Numeric(16,0),
TypeCode Varchar(50),
Name Varchar(255),
ParentGUID Numeric(16,0),
FacilityGUID Numeric(16,0)
)
AS
BEGIN

DECLARE @Facility as Numeric(16,0)
DECLARE @TypeCode as Varchar(30);
DECLARE @Facilities as TABLE(FacilityGUID Numeric(16,0))

INSERT INTO @Facilities
SELECT DISTINCT FacilityGUID
FROM [$(XAProd)]..CV3Location

SET @Facility = (SELECT FacilityGUID FROM [$(XAProd)]..CV3Location WHERE GUID = @Location)
--SELECT @FLocale
WHILE @Location NOT IN (SELECT FacilityGUID FROM @Facilities)
BEGIN
    INSERT INTO @locationDetails (GUID, TypeCode, Name, ParentGUID, FacilityGUID)
    SELECT  GUID,
            TypeCode,
            Name,
            ParentGUID,
            FacilityGUID
        FROM [$(XAProd)]..CV3Location WHERE GUID = @Location

    SET @Location = (SELECT ParentGUID FROM [$(XAProd)]..CV3Location WHERE GUID = @Location)
END


INSERT INTO @locationDetails (GUID, TypeCode, Name, ParentGUID, FacilityGUID)
SELECT  GUID,
    'Facility',
    Name,
    ParentGUID,
    FacilityGUID
FROM [$(XAProd)]..CV3Location WHERE GUID = @Facility

RETURN
END;
试试这个:

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

你在起诉Allxa吗?位置表的层次结构参差不齐。您可能需要比当前使用的稍多一些。事实上,我使用的parentguid列实际上是LocnGrpGuid列,但是对于不知道DB的人来说,这是同一件事,实际上parentguid可以引用一个间隔。那么我将不得不第三次加入位置表。你如何区分病房和床?是否有一个字段包含您要针对的值?location有一列[typecode],可以=unit或bed。床上总是有一个parentguid链接到uniti,我认为这对于我在这里尝试做的事情来说有点过分了,但是对于其他事情来说是有用的。所以,谢谢。现在这很明显了!在WHERE子句中,我正在尝试使用CASE。