with - SQL Server recursivo auto unirse
with with sql server (1)
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
Tengo una tabla de categorías simple como con las siguientes columnas:
- Carné de identidad
- Nombre
- Identificación de los padres
Por lo tanto, una cantidad infinita de Categorías puede ser el hijo de una categoría. Tomemos por ejemplo la siguiente jerarquía:
Quiero, en una consulta simple que devuelve la categoría "Portátiles empresariales" para devolver también una columna con todos sus padres, separador de coma o algo así:
O tome el siguiente ejemplo: