我有一个包含列的表:ParentID
,UnitName
和OrganizationLevelID
。 UnitName
是帐户的名称,如果是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;
预期产出:
答案 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。