SQL Server recursive self join

Tengo una tabla de categorías simples como con las siguientes columnas:

  • Carné de identidad
  • Nombre
  • Identificación de los padres

Entonces, una cantidad infinita de categorías puede ser hija de una categoría. Tomemos por ejemplo la siguiente jerarquía:

enter image description here

Quiero, en una simple consulta que devuelve la categoría “Business Laptops” para devolver también una columna con todos sus padres, separador de comas o algo así:

enter image description here

O tome el siguiente ejemplo:

enter image description here

Recurrente cte al rescate ….

Crear y completar la tabla de muestra ( Por favor guárdenos este paso en sus preguntas futuras):

DECLARE @T as table ( id int, name varchar(100), parent_id int ) INSERT INTO @T VALUES (1, 'A', NULL), (2, 'A.1', 1), (3, 'A.2', 1), (4, 'A.1.1', 2), (5, 'B', NULL), (6, 'B.1', 5), (7, 'B.1.1', 6), (8, 'B.2', 5), (9, 'A.1.1.1', 4), (10, 'A.1.1.2', 4) 

El cte:

 ;WITH CTE AS ( SELECT id, name, name as path, parent_id FROM @T WHERE parent_id IS NULL UNION ALL SELECT t.id, t.name, cast(cte.path +','+ t.name as varchar(100)), t.parent_id FROM @T t INNER JOIN CTE ON t.parent_id = CTE.id ) 

La consulta:

 SELECT id, name, path FROM CTE 

Resultados:

 id name path 1 AA 5 BB 6 B.1 B,B.1 8 B.2 B,B.2 7 B.1.1 B,B.1,B.1.1 2 A.1 A,A.1 3 A.2 A,A.2 4 A.1.1 A,A.1,A.1.1 9 A.1.1.1 A,A.1,A.1.1,A.1.1.1 10 A.1.1.2 A,A.1,A.1.1,A.1.1.2 

Vea la demostración en línea en rextester