Autounión recursiva de SQL Server
Tengo una tabla de categorías simple con las siguientes columnas:
- Identificación
- Nombre
- Identificación de los padres
Entonces, una cantidad infinita de categorías pueden ser hijas de una categoría. Tomemos, por ejemplo, la siguiente jerarquía:
Quiero, en una consulta simple que devuelve la categoría "Portátiles empresariales", devolver también una columna con todos sus padres, separador de coma o algo así:
O tome el siguiente ejemplo:
Aceptado
cte recursivo al rescate....
Cree y complete una tabla de muestra ( 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 A A
5 B B
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
Ver demostración en línea en rextester