Este es un post rápido con el único objetivo de escribir un ejemplo simple de Recursividad en T-SQL.
Imaginemos que tenemos una tabla de Clientes (similar a la de la figura) en la que además de otros datos disponemos del IdCliente y el IdPadrino.
Si quisiéramos obtener todos los descendientes de un cliente concreto (hijos, nietos, bisnietos, etc.) hasta un subnivel de profundidad determinado.
Para conseguirlo podríamos usar una consulta recursiva en TSQL que nos devolviera dichos datos.
La Consulta Recursiva SQL seria la siguiente:
En esta consulta recuperaremos todos los descendientes del cliente 18, en otras palabras, comenzaremos por los clientes que tienen como padrino al cliente numero 18. Además estaremos descendiendo hasta el subnivel 5 como máximo.
Hola Derbis, me ha venido genial tu aportación y he podido resolver mi problema que era obtener todo el arbol completo a partir de un elemento.
ResponderEliminarPongo aquí mi solución por si a alguien le sirve.
WITH RecursivaSimplePadres(IdSeguimientoComercial, IdSeguimientoComercialAnterior)
AS
(
SELECT IdSeguimientoComercial,IdSeguimientoComercialAnterior FROM CANDIDATOSSEGUIMIENTOCOMERCIAL WHERE IdSeguimientoComercial = 2
UNION ALL
SELECT C.IdSeguimientoComercial, C.IdSeguimientoComercialAnterior
FROM CANDIDATOSSEGUIMIENTOCOMERCIAL C
INNER JOIN RecursivaSimplePadres R ON R.IdSeguimientoComercialAnterior= C.IdSeguimientoComercial
),
RecursivaSimpleHijos(IdSeguimientoComercial, IdSeguimientoComercialAnterior)
AS
(
SELECT IdSeguimientoComercial, IdSeguimientoComercialAnterior FROM CANDIDATOSSEGUIMIENTOCOMERCIAL WHERE IdSeguimientoComercial = 2
UNION ALL
SELECT C.IdSeguimientoComercial, C.IdSeguimientoComercialAnterior
FROM CANDIDATOSSEGUIMIENTOCOMERCIAL C
INNER JOIN RecursivaSimpleHijos R ON R.IdSeguimientoComercial = C.IdSeguimientoComercialAnterior
)
SELECT RSP.IdSeguimientoComercial, RSP.IdSeguimientoComercialAnterior
FROM RecursivaSimplePadres RSP
UNION
SELECT RSH.IdSeguimientoComercial, RSH.IdSeguimientoComercialAnterior
FROM RecursivaSimpleHijos RSH