es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta jerárquica de SQL Server

Tengo una tabla de usuarios configurada así en una base de datos de SQL Server:

UserID ReportsToUserID
1 NULL
2 NULL
3 1
4 2
5 2
6 3
7 5

¿Existe alguna forma en SQL de obtener a todos los empleados en la cadena de informes? Por ejemplo, cuando proporciono 1, espero obtener los empleados ID 3,6.

Cuando proporciono 2, espero 4,5,7.

No sé cuál es el número máximo de cadenas bajo las cuales puede ir.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Un usuario.

    Sí, hay una manera de obtener a todos los empleados en la cadena de informes en SQL. Puede utilizar una expresión de tabla común (CTE, por sus siglas en inglés) recursiva para recorrer la jerarquía de la tabla.

    La siguiente consulta devolverá a todos los empleados en la cadena de informes cuando proporcione un ID de usuario:

    WITH cte AS (
        SELECT UserID, ReportsToUserID
        FROM Users
        WHERE UserID = @UserID
        UNION ALL
        SELECT u.UserID, u.ReportsToUserID
        FROM Users u
        INNER JOIN cte c ON c.ReportsToUserID = u.UserID
    )
    SELECT UserID
    FROM cte
    

Comments are closed.