within with recursivo recursividad recursive maxrecursion examples example ejemplos cto cte anidados and sql sql-server recursion

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

Ver demostración en línea en rextester

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: