Monday, June 11, 2012

SQL SERVER – Simple Example of Recursive CTE


Recursive is the process in which the query executes itself. It is used to get results based on the output of base query. We can use CTE as Recursive CTE (Common Table Expression).
Here, the result of CTE is repeatedly used to get the final resultset. The following example will explain in detail where I am using AdventureWorks database and try to find hierarchy of Managers and Employees.
USE AdventureWorks
GO
WITH Emp_CTE AS (SELECT EmployeeIDContactIDLoginIDManagerIDTitleBirthDateFROM HumanResources.EmployeeWHERE ManagerID IS NULLUNION ALLSELECT e.EmployeeIDe.ContactIDe.LoginIDe.ManagerIDe.Title,e.BirthDateFROM HumanResources.Employee eINNER JOIN Emp_CTE ecte ON ecte.EmployeeID e.ManagerID)SELECT *FROM Emp_CTE
GO
In the above example Emp_CTE is a Common Expression Table, the base record for the CTE is derived by the first sql query before UNION ALL. The result of the query gives you the EmployeeID which don’t have ManagerID.
Second query after UNION ALL is executed repeatedly to get results and it will continue until it returns no rows. For above e.g. Result will have EmployeeIDs which have ManagerID (ie, EmployeeID of the first result).  This is obtained by joining CTE result with Employee table on columns EmployeeID of CTE with ManagerID of table Employee.
This process is recursive and will continue till there is no ManagerID who doesn’t have EmployeeID.

No comments: