Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

CTE para obter todos os filhos (descendentes) de um pai


Isso deve servir:
WITH MyTest as
(
  SELECT P.ProductID, P.ParentID, CAST(P.ProductID AS VarChar(Max)) as Level
  FROM Products P
  WHERE P.ParentID = 0

  UNION ALL

  SELECT P1.ProductID, P1.ParentID, CAST(P1.ProductID AS VarChar(Max)) + ', ' + M.Level
  FROM Products P1  
  INNER JOIN MyTest M
  ON M.ProductID = P1.ParentID
 )
SELECT * From MyTest

E aqui está o SQL Fiddle atualizado.

Além disso, confira este link para obter ajuda com CTEs... Eles são definitivamente bons de saber:

Espero que isso faça o truque!