Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Искате да получите списък на всички младши лекари, работещи под старши лекар и обратно?

Нещо подобно може да помогне:

Първо малко тестови данни:

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)

Заявката е подобна на тази:

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

За да получите желания резултат, не е нужно да използвате seniorDoctorId защото те вече имат връзка родител-дете.

Вижте пример тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. добавяне на описание на колона

  2. Какво е значението на префикса N в T-SQL изразите и кога трябва да го използвам?

  3. EF4.1:Възможно ли е да има връзка нула или едно към нула или едно (0..1 към 0..1)?

  4. Как мога да накарам тригер да се задейства на всеки вмъкнат ред по време на INSERT INTO Table (и т.н.) SELECT * FROM Table2?

  5. Разбиране на функцията PIVOT в T-SQL