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

时间:2015-02-17 10:09:32

标签: sql-server tsql

我有一个包含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。

1 个答案:

答案 0 :(得分:1)

您可以在common table expression

的帮助下完成此操作
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;

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