Aug112011

SQL Server da güzel bir Recursive fonksiyon örneği (binary Tree)

Published by admin at 12:54 AM under

Aile ağacı örneği
Kaynak : http://www.sqlservercurry.com/2009/06/simple-family-tree-query-using.html

Bu örnekte hem sql serverda recursive fonksiyon kullanımını gösteriyor ,hemde binary tree yapısında bir database iniz varsa bunun database seviyesinde nasıl işleneceğinizi gösteriyor.

örneğimiz için temp tablo ve datalarını aşağıdaki gibi hazırlıyoruz.

DECLARE @TT TABLE
(
ID int,
Relation varchar(25),
Name varchar(25),
ParentID int
)

INSERT @TT
SELECT 1,' Great GrandFather' , 'Thomas Bishop', null UNION ALL
SELECT 2,'Grand Mom', 'Elian Thomas Wilson' , 1 UNION ALL
SELECT 3, 'Dad', 'James Wilson',2 UNION ALL
SELECT 4, 'Uncle', 'Michael Wilson', 2 UNION ALL
SELECT 5, 'Aunt', 'Nancy Manor', 2 UNION ALL
SELECT 6, 'Grand Uncle', 'Michael Bishop', 1 UNION ALL
SELECT 7, 'Brother', 'David James Wilson',3 UNION ALL
SELECT 8, 'Sister', 'Michelle Clark', 3 UNION ALL
SELECT 9, 'Brother', 'Robert James Wilson', 3 UNION ALL
SELECT 10, 'Me', 'Steve James Wilson', 3


Yukarıdaki tanımlamalardan sonra aşağıdaki Recursive fonksiyon ile Parent ve Generation Level bulunuyor.


;WITH FamilyTree
AS
(
    SELECT *, CAST(NULL AS VARCHAR(25)) AS ParentName, 0 AS Generation
    FROM @TT
    WHERE ParentID IS NULL
   
    UNION ALL
   
    SELECT Fam.*,FamilyTree.Name AS ParentName, Generation + 1
    FROM @TT AS Fam
    INNER JOIN FamilyTree
    ON Fam.ParentID = FamilyTree.ID
)

SELECT * FROM FamilyTree

 

çıktı görüntüsü aşağıdaki gibi olacaktır.



[KickIt] [Dzone] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

Tags: ,

E-mail | Permalink | Trackback | Post RSSRSS comment feed 0 Responses