如何重新查询查询t-sql

时间:2016-10-25 13:32:46

标签: sql sql-server tsql

我有一个包含列的表:ParentIDUnitNameOrganizationLevelIDUnitName帐户的名称,如果是OrganizationLevelID=1,则OrganizationLevelID=2网站的名称。我试图查询该网站,然后根据这些网站的ParentID查询该帐户。我一直在尝试使用下面的子查询,但它在帐户列中只返回NULL。

我目前的查询:

    SELECT t1.ParentID,
           t1.UnitName,
           (SELECT t2.UnitName
            FROM Organization t2
            WHERE t2.ParentID=t1.ParentID
            AND t2.OrganizationLevelID=1)
    FROM Organization t1
    WHERE OrganizationLevelID=2;

预期产出:

enter image description here

2 个答案:

答案 0 :(得分:1)

因为在外部查询中WHERE OrganizationLevelID=2,您将获得null 条件 过滤仅返回仅站点的ParentID的数据 所以你的查询将是 您必须从查询中删除WHERE OrganizationLevelID=2

答案 1 :(得分:0)

这有用吗:

CREATE TABLE #Orgs (ParentId INT, UnitName NVARCHAR(20), OrgLevelId INT)

INSERT  INTO #Orgs ( ParentId , UnitName , OrgLevelId )
        SELECT  1 , 'Acc Name' , 1
        UNION ALL
        SELECT  1 , 'SITE 1' , 2
        UNION ALL
        SELECT  1 , 'SITE 2' , 2
        UNION ALL
        SELECT  1 , 'SITE 3' , 2

SELECT  t1.ParentId ,
        t1.UnitName ,
        t2.UnitName AS SiteName
FROM    #Orgs t1
        -- joins to self but with org level = 2
        INNER JOIN #Orgs t2 ON t2.ParentId = t1.ParentId
                               AND t2.OrgLevelId = 2
WHERE   t1.OrgLevelId = 1;

DROP TABLE #Orgs

返回:

ParentID    UnitName    SiteName
1           Acc Name    SITE 1
1           Acc Name    SITE 2
1           Acc Name    SITE 3

注意:仅适用于2个级别,您没有提及是否有更多级别而不是2。