देखें:
- SQL सर्वर - पुनरावर्ती CTE का सरल उदाहरण
- MSDN:कॉमन टेबल एक्सप्रेशन का उपयोग कर रिकर्सिव क्वेरीज़
- SQL सर्वर पुनरावर्ती CTE (यह बिल्कुल वैसा ही लगता है जैसा आप काम कर रहे हैं!)
अपडेट करें:
एक उचित पुनरावर्ती सीटीई में मूल रूप से तीन चीजें होती हैं:
-
एक एंकर
SELECT
शुरुआत के लिए; जो चुन सकता है उदा। मूल स्तर के कर्मचारी (जहांReports_To
NULL है), या यह आपके द्वारा परिभाषित किसी भी मनमाने कर्मचारी का चयन कर सकता है, उदा। एक पैरामीटर द्वारा -
एक
UNION ALL
-
एक पुनरावर्ती
SELECT
कथन जो उसी से चयन करता है, आमतौर पर स्व-संदर्भ तालिका और वर्तमान में बनाए जा रहे पुनरावर्ती CTE के साथ जुड़ता है
यह आपको एक परिणाम सेट को पुनरावर्ती रूप से बनाने की क्षमता देता है जिसे आप फिर से चुन सकते हैं।
यदि आप Northwind
को देखते हैं नमूना डेटाबेस, इसमें Employees
नामक एक तालिका है जो स्व-संदर्भित है:Employees.ReportsTo --> Employees.EmployeeID
परिभाषित करता है कि कौन किसे रिपोर्ट करता है।
आपका सीटीई कुछ इस तरह दिखेगा:
;WITH RecursiveCTE AS
(
-- anchor query; get the CEO
SELECT EmployeeID, FirstName, LastName, Title, 1 AS 'Level', ReportsTo
FROM dbo.Employees
WHERE ReportsTo IS NULL
UNION ALL
-- recursive part; select next Employees that have ReportsTo -> cte.EmployeeID
SELECT
e.EmployeeID, e.FirstName, e.LastName, e.Title,
cte.Level + 1 AS 'Level', e.ReportsTo
FROM
dbo.Employees e
INNER JOIN
RecursiveCTE cte ON e.ReportsTo = cte.EmployeeID
)
SELECT *
FROM RecursiveCTE
ORDER BY Level, LastName
मैं नहीं जानता कि क्या आप अपने नमूने को एक उचित पुनरावर्ती सीटीई में अनुवाद कर सकते हैं - लेकिन यह मूल रूप से इसका सार है:एंकर क्वेरी, यूनियन ऑल, रिकर्सिव क्वेरी