CTE'yi asla özyineleme ile kullanmıyorum. Onunla ilgili bir makale okuyordum. Bu makale, Sql sunucusu CTE ve özyineleme yardımıyla çalışan bilgilerini gösterir. Temelde çalışanları ve yönetici bilgilerini gösteriyor. Bu sorgunun nasıl çalıştığını anlayamıyorum. İşte sorgu:
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
Burada çıktının nasıl gösterildiğini yazıyorum:
Sadece önce menajeri ve sonra astını bir döngüde nasıl gösterdiğini bilmem gerekiyor. Sanırım ilk sql ifadesi yalnızca bir kez ateşleniyor ve bu tüm çalışan kimliklerini döndürüyor.
Ve ikinci sorgu, çalışanın mevcut yönetici kimliğiyle üzerinde bulunduğu veritabanını sorgulayarak tekrar tekrar tetiklenir.
Lütfen sql ifadesinin bir iç döngüde nasıl çalıştığını açıklayın ve ayrıca bana sql yürütme sırasını söyleyin. Teşekkürler.
2. soru aşaması
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
S 1) N'nin değeri nasıl artırılıyor? değer her seferinde N'ye atanırsa, o zaman N değeri artırılabilir, ancak yalnızca ilk kez N değeri başlatılır.
S 2) CTE ve çalışan ilişkilerinin yinelemesi:
İki yönetici eklediğim ve ikinci yöneticinin altına birkaç çalışan daha eklediğim an, sorunun başladığı yerdir.
İlk yönetici ayrıntısını ve sonraki satırlarda yalnızca o yöneticinin astıyla ilgili çalışan ayrıntılarını görüntülemek istiyorum.
varsaymak
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
Sonuçları CTE ifadeleri ile bu şekilde görüntülemek istiyorum. Yönetici-çalışan ilişkilerini çekebilmek için burada verdiğim sql'de neleri değiştireceğimi söyleyin lütfen. Teşekkürler.
Çıktının şöyle olmasını istiyorum:
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
Mümkün mü...?