Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Chcesz otrzymać listę wszystkich młodszych lekarzy pracujących pod starszym lekarzem i odwrotnie?

Coś takiego może pomóc:

Najpierw trochę danych testowych:

DECLARE @DoctorInfo TABLE
                (
                    doctorId INT,
                    fistName VARCHAR(100),
                    seniorDoctorId INT
                )

INSERT INTO @DoctorInfo
VALUES
    (34,'ABC',0),
    (35,'XYZ',34),
    (36,'bsd',34),
    (37,'dfdf',35),
    (38,'dffdg',0)

Zapytanie w ten sposób:

DECLARE @doctorId INT
SET @doctorId=35
;WITH CTE(doctorId,seniorDoctorId,fistName)
AS
(
    SELECT
        DoctorInfo.doctorId,
        DoctorInfo.seniorDoctorId,
        DoctorInfo.fistName
    FROM
        @DoctorInfo AS DoctorInfo
    WHERE
        [email protected]
    UNION ALL
    SELECT
        DoctorInfo.doctorId,
        DoctorInfo.seniorDoctorId,
        DoctorInfo.fistName
    FROM
        @DoctorInfo AS DoctorInfo
        JOIN CTE
            ON DoctorInfo.seniorDoctorId=CTE.doctorId
)
SELECT
    *
FROM
    CTE

Aby uzyskać pożądane dane wyjściowe, nie musisz używać seniorDoctorId ponieważ mają już relację rodzic-dziecko.

Zobacz przykład tutaj



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można przejść do procedury składowanej na zdalnym serwerze SQL Server 2008

  2. Używanie zmiennej w instrukcji SQL LIKE

  3. SQL Server — brudne odczyty Plusy i minusy

  4. SQL Server — uwzględnij wartość NULL za pomocą UNPIVOT

  5. Jak sprawdzić ustawienie ANSI_NULLS sesji w SQL Server?