我有一个包含ParentCompnayID列的公司表以及其他列,这些列告诉哪家公司是其他公司的母公司。
DECLARE @company TABLE
(
CompanyID INT IDENTITY(1, 1) ,
CompanyName VARCHAR(50) ,
ParentCompnayID INT
)
INSERT INTO @company
( CompanyName ,
ParentCompnayID
)
SELECT 'Company A' ,
0
UNION
SELECT 'Company AB' ,
1
UNION
SELECT 'Company AA' ,
1
UNION
SELECT 'Company AAA' ,
2
SELECT * FROM @company
现在正如您在上面的代码中看到的那样,Compnay A的parentCompanyID = 0,这意味着它没有任何父级, 公司AB和公司AA的母公司是A公司。 此外,AAA公司的母公司是Compnay AA。 现在我的问题是,如果我在我的查询/程序中传递compnayID 1,我希望得到它的所有子公司以及公司1的子公司等等...... 根据上述代码,如果我将通过公司ID 1,我应该获得公司AA,公司AB和公司AAA(公司AA的子公司)
任何人都可以帮我构建它的sql。我正在使用SQL Server 2012。
答案 0 :(得分:1)
declare @companyId int
set @companyId = 1
;WITH cte
AS
(
SELECT CompanyId, CompanyName, ParentCompanyId, 0 as steps
FROM dbo.tblCompany
--WHERE ParentCompanyId IS NOT NULL
WHERE companyid = @companyId
UNION ALL
SELECT c.CompanyId, c.CompanyName, c.ParentCompanyId, cte.steps +1 as steps
FROM dbo.tblCompany AS c
inner JOIN cte ON cte.CompanyId = c.ParentCompanyId
)
SELECT CompanyId, CompanyName, ParentCompanyId, steps
FROM cte;
在上面的查询步骤中是层次结构中的级别。