Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Muốn nhận danh sách tất cả các bác sĩ cấp dưới làm việc dưới quyền bác sĩ cấp cao và ngược lại?

Một cái gì đó như thế này có thể hữu ích:

Đầu tiên một số dữ liệu thử nghiệm:

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)

Truy vấn như thế này:

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

Để nhận đầu ra desierd, bạn không cần phải sử dụng seniorDoctorId bởi vì họ đã có quan hệ con cái.

Xem ví dụ tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể kết nối với SQL Server bằng Xác thực Windows từ ứng dụng web Java EE không?

  2. Chèn hàng loạt tệp dữ liệu vào máy chủ SQL

  3. Thay đổi loại cột mà không làm mất dữ liệu

  4. CHÈN SỐ LƯỢNG LỚN với cột nhận dạng (tăng tự động)

  5. SQL:Thay thế một phần của cột trên nhiều hàng dựa trên bảng thứ hai