Saya tidak pernah menggunakan CTE dengan rekursi. Saya baru saja membaca artikel tentang itu. Artikel ini menunjukkan info karyawan dengan bantuan CTE dan rekursi server Sql. Ini pada dasarnya menunjukkan karyawan dan info manajer mereka. Saya tidak dapat memahami cara kerja kueri ini. Berikut pertanyaannya:
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
Di sini saya memposting tentang bagaimana output ditampilkan:
Saya hanya perlu tahu bagaimana hal itu menunjukkan manajer terlebih dahulu dan kemudian bawahannya dalam satu lingkaran. Saya kira pernyataan sql pertama hanya menyala sekali dan itu mengembalikan semua id karyawan.
Dan kueri kedua berulang kali diaktifkan, menanyakan database tempat karyawan ada dengan id manajer saat ini.
Tolong jelaskan bagaimana pernyataan sql dieksekusi dalam loop internal dan beri tahu saya urutan eksekusi sql. Terima kasih.
Pertanyaan tahap kedua SAYA
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
Q 1) Bagaimana nilai N bertambah? jika nilai diberikan ke N setiap kali maka nilai N dapat bertambah tetapi hanya pertama kali nilai N diinisialisasi.
Q 2) CTE dan rekursi hubungan karyawan:
Saat saya menambahkan dua manajer dan menambahkan beberapa karyawan lagi di bawah manajer kedua adalah tempat masalah dimulai.
Saya ingin menampilkan detail manajer pertama dan di baris berikutnya hanya detail karyawan yang terkait dengan bawahan manajer tersebut.
Seharusnya
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
Saya ingin menampilkan hasil sedemikian rupa dengan ekspresi CTE. Tolong beri tahu saya apa yang harus diubah di sql saya yang saya berikan di sini untuk menarik hubungan manajer-karyawan. Terima kasih.
Saya ingin hasilnya seperti ini:
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
Apakah ini mungkin ...?