मैं कभी भी सीटीई का उपयोग पुनरावृत्ति के साथ नहीं करता। मैं उस पर एक लेख पढ़ रहा था। यह आलेख Sql सर्वर CTE और पुनरावर्तन की सहायता से कर्मचारी जानकारी दिखाता है। यह मूल रूप से कर्मचारियों और उनके प्रबंधक की जानकारी दिखा रहा है। मैं यह समझने में सक्षम नहीं हूं कि यह क्वेरी कैसे काम करती है। यहाँ प्रश्न है:
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
यहाँ मैं पोस्ट कर रहा हूँ कि आउटपुट कैसे दिख रहा है:
मुझे सिर्फ यह जानने की जरूरत है कि यह पहले कैसे प्रबंधक को दिखा रहा है और फिर एक पाश में उसके अधीनस्थ। मुझे लगता है कि पहला sql स्टेटमेंट केवल एक बार फायर करता है और जो सभी कर्मचारी आईडी देता है।
और दूसरी क्वेरी बार-बार फायर करती है, उस डेटाबेस को क्वेरी करना जिस पर कर्मचारी वर्तमान प्रबंधक आईडी के साथ मौजूद है।
कृपया बताएं कि एक आंतरिक लूप में sql स्टेटमेंट कैसे निष्पादित होता है और मुझे sql निष्पादन आदेश भी बताता है। धन्यवाद।
प्रश्न का मेरा दूसरा चरण
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
Q 1) N का मान कैसे बढ़ रहा है? यदि मान हर बार N को सौंपा जाता है तो N मान को बढ़ाया जा सकता है लेकिन केवल पहली बार N मान को आरंभीकृत किया गया था।
Q 2) CTE और कर्मचारी संबंधों की पुनरावृत्ति:
जिस क्षण मैं दो प्रबंधकों को जोड़ता हूं और दूसरे प्रबंधक के तहत कुछ और कर्मचारियों को जोड़ता हूं, जहां समस्या शुरू होती है।
मैं पहले प्रबंधक विवरण और अगली पंक्तियों को केवल उन कर्मचारी विवरणों को प्रदर्शित करना चाहता हूं जो उस प्रबंधक के अधीनस्थ से संबंधित हैं।
मान लीजिए
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
मैं सीटीई के भावों के साथ इस तरह से परिणाम प्रदर्शित करना चाहता हूं। कृपया मुझे बताएं कि प्रबंधक-कर्मचारी संबंधों को खींचने के लिए मैंने अपने एसक्यूएल में क्या संशोधन किया है। धन्यवाद।
मैं चाहता हूं कि आउटपुट ऐसा हो:
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
क्या यह संभव है...?