我有一个Company表,其中有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。
您可以在公共表表达式的帮助下完成此操作
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;
在上面的查询步骤中是层次结构中的级别