PDA

View Full Version : Select بازگشتی



اوبالیت به بو
پنج شنبه 11 تیر 1394, 15:37 عصر
درود بر شما


ساختاری به این شکل وجود داره:

Id
Parent_Id
Name

و فعلا تا 3 سطح سیستم پیش می ره. در سطح 3 برای اینکه نام سطح 1 رو بدست بیاریم باید از Select بازگشتی استفاده کرد؟ آیا توصیه میشه؟

pezhvakco
پنج شنبه 11 تیر 1394, 16:55 عصر
من هم یه همچین جدولی دارم و با توجه به کلید داخلی که داره دارم با همین روش کار میکنم .

اوبالیت به بو
شنبه 13 تیر 1394, 08:48 صبح
من هم یه همچین جدولی دارم و با توجه به کلید داخلی که داره دارم با همین روش کار میکنم .


ممکن هست یک نمونه برای من قرار بدید؟

tooraj_azizi_1035
شنبه 13 تیر 1394, 11:02 صبح
سلام
از cte بازگشتی استفاده کنید:



USE AdventureWorks2008R2;
GO
WITH DirectReports (ManagerID, EmployeeID, Title, DeptID, Level)
AS
(
-- Anchor member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, edh.DepartmentID,
0 AS Level
FROM dbo.MyEmployees AS e
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.EmployeeID = edh.BusinessEntityID AND edh.EndDate IS NULL
WHERE ManagerID IS NULL
UNION ALL
-- Recursive member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, edh.DepartmentID,
Level + 1
FROM dbo.MyEmployees AS e
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.EmployeeID = edh.BusinessEntityID AND edh.EndDate IS NULL
INNER JOIN DirectReports AS d
ON e.ManagerID = d.EmployeeID
)
-- Statement that executes the CTE
SELECT ManagerID, EmployeeID, Title, DeptID, Level
FROM DirectReports
INNER JOIN HumanResources.Department AS dp
ON DirectReports.DeptID = dp.DepartmentID
WHERE dp.GroupName = N'Sales and Marketing' OR Level = 0;
GO

اوبالیت به بو
شنبه 13 تیر 1394, 15:43 عصر
درود بر شما

ممکنه کد رو اصلاح کنید. ممنون