sql >> Base de Datos >  >> RDS >> Sqlserver

CTE para obtener todos los hijos (descendientes) de un padre

Esto debería hacerlo:

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

Y aquí está el SQL Fiddle actualizado.

Además, consulta este enlace para obtener ayuda con CTE... Definitivamente es bueno saberlo:

¡Espero que esto funcione!