Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

CTE pour obtenir tous les enfants (descendants) d'un parent

Cela devrait le faire :

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

Et voici le SQL Fiddle mis à jour.

Consultez également ce lien pour obtenir de l'aide sur les CTE... Ils sont certainement bons à savoir :

J'espère que cela fera l'affaire !