Nigdy nie używam CTE z rekurencją. Właśnie czytałem artykuł na ten temat. W tym artykule przedstawiono informacje o pracownikach za pomocą CTE serwera Sql i rekurencji. Zasadniczo jest to pokazywanie pracownikom i ich menadżerom informacji. Nie jestem w stanie zrozumieć, jak działa to zapytanie. Oto zapytanie:
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
Tutaj piszę o tym, jak pokazuje się wyjście:
Muszę tylko wiedzieć, jak to najpierw pokazuje menedżerowi, a potem w pętli swojemu podwładnemu. Wydaje mi się, że pierwsza instrukcja sql uruchamia się tylko raz i zwraca wszystkie identyfikatory pracowników.
Drugie zapytanie jest wielokrotnie uruchamiane, wysyłając zapytanie do bazy danych, w której znajduje się pracownik z bieżącym identyfikatorem menedżera.
Proszę wyjaśnić, w jaki sposób instrukcja sql wykonuje się w pętli wewnętrznej, a także podać kolejność wykonania sql. Dzięki.
MOJA druga faza pytań
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
P 1) W jaki sposób zwiększa się wartość N? jeśli wartość jest przypisywana do N za każdym razem, wówczas wartość N może być zwiększana, ale tylko przy pierwszej inicjalizacji wartości N.
Q 2) CTE i rekurencja relacji pracowniczych:
Problem zaczyna się w momencie, gdy dodam dwóch menedżerów i kilku pracowników pod drugim menedżerem.
Chcę wyświetlić szczegóły pierwszego menedżera, aw następnych wierszach tylko te szczegóły dotyczące pracowników, które dotyczą podwładnego tego menedżera.
Przypuszczać
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
Chcę wyświetlić wyniki w taki sposób za pomocą wyrażeń CTE. Proszę powiedz mi, co zmodyfikować w moim sql, który podałem tutaj, aby wyciągnąć relacje menedżer-pracownik. Dzięki.
Chcę, aby wynik wyglądał następująco:
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
Czy to możliwe...?