Tôi không bao giờ sử dụng CTE với đệ quy. Tôi chỉ đang đọc một bài báo về nó. Bài viết này hiển thị thông tin nhân viên với sự trợ giúp của CTE máy chủ Sql và đệ quy. Về cơ bản, nó hiển thị thông tin nhân viên và người quản lý của họ. Tôi không thể hiểu cách hoạt động của truy vấn này. Đây là truy vấn:
WITH
cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID, FirstName, LastName, ManagerID, 1
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID,
r.EmpLevel + 1
FROM Employees e
INNER JOIN cteReports r
ON e.ManagerID = r.EmpID
)
SELECT
FirstName + ' ' + LastName AS FullName,
EmpLevel,
(SELECT FirstName + ' ' + LastName FROM Employees
WHERE EmployeeID = cteReports.MgrID) AS Manager
FROM cteReports
ORDER BY EmpLevel, MgrID
Ở đây tôi đăng về cách hiển thị đầu ra:
Tôi chỉ cần biết cách nó hiển thị với người quản lý đầu tiên và sau đó là cấp dưới của anh ta trong một vòng lặp. Tôi đoán câu lệnh sql đầu tiên chỉ kích hoạt một lần và điều đó trả về tất cả id nhân viên.
Và truy vấn thứ hai liên tục kích hoạt, truy vấn cơ sở dữ liệu mà nhân viên tồn tại với id người quản lý hiện tại.
Vui lòng giải thích cách câu lệnh sql thực thi trong vòng lặp nội bộ và cũng cho tôi biết thứ tự thực hiện lệnh sql. Cảm ơn.
Giai đoạn câu hỏi thứ 2 của TÔI
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
Câu hỏi 1) Giá trị của N tăng lên như thế nào? nếu giá trị được gán cho N mọi lúc thì giá trị N có thể được tăng lên nhưng chỉ giá trị N lần đầu tiên được khởi tạo.
Q 2) CTE và đệ quy của quan hệ nhân viên:
Thời điểm tôi thêm hai người quản lý và thêm một vài nhân viên nữa dưới người quản lý thứ hai là lúc vấn đề bắt đầu.
Tôi muốn hiển thị chi tiết người quản lý đầu tiên và trong các hàng tiếp theo chỉ những thông tin chi tiết về nhân viên có liên quan đến cấp dưới của người quản lý đó.
Giả sử
ID Name MgrID Level
--- ---- ------ -----
1 Keith NULL 1
2 Josh 1 2
3 Robin 1 2
4 Raja 2 3
5 Tridip NULL 1
6 Arijit 5 2
7 Amit 5 2
8 Dev 6 3
Tôi muốn hiển thị kết quả theo cách như vậy với các biểu thức CTE. Vui lòng cho tôi biết những gì cần sửa đổi trong sql của tôi mà tôi đã đưa ra ở đây để kéo mối quan hệ giữa người quản lý và nhân viên. Cảm ơn.
Tôi muốn đầu ra như thế này:
ID Name MgrID nLevel Family
----------- ------ ----------- ----------- --------------------
1 Keith NULL 1 1
3 Robin 1 2 1
2 Josh 1 2 1
4 Raja 2 3 1
5 Tridip NULL 1 2
7 Amit 5 2 2
6 Arijit 5 2 2
8 Dev 6 3 2
Điều này có thể ...?