将具有父子关系的所有记录获取到第N级



我有一个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;

在上面的查询步骤中是层次结构中的级别

最新更新