SQL Server Indonesia User Groups Community {CTE} Mendapatkan Top Parent dari sebuah Hirarki - Cahyo drop in {here}

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

Cahyo drop in {here}

SQL as breakfast, BI for lunch and dinner with MDX

{CTE} Mendapatkan Top Parent dari sebuah Hirarki

Sudah sangat amat lama sekali rasanya saya tidak menulis blog. Padahal banyak sekali ide/bahan saat sedang menemui kasus2 aneh di klien. Dari pada blognya sepi mending saya ngeblog jawaban pertanyaan di milis mumpung lagi g males nulis :D

Tulisan kali ini berisi tentang bagaimana cara mendapatkan Top Parent dari sebuah hirarki.

Berikut adalah contoh data berikut skrip yang dapat dipelajari.

 declare @Source table(
    ID char(4),
    ParentID char(4)
)

insert into @Source values
('as01',NULL),
('as02','as01'),
('as03','as02'),
('as04','as03')

;WITH CSource
AS
(
   SELECT e.ID,e.ParentID,
        0 AS Level, e.ID as TopParent
    FROM @Source AS e
    WHERE e.ParentID IS NULL
    UNION ALL
    SELECT e.ID,e.ParentID,
        Level + 1, d.TopParent
    FROM @Source AS e
    INNER JOIN CSource AS d
        ON e.ParentID = d.ID
)

SELECT ID,TopParent
FROM CSource
WHERE ID='as04'

Logikanya ada pada bagian yang dicetak tebal.

Jika ingin mencari Parent pada level tertentu juga bukanlah hal yang sulit. Berikut contoh jika ingin mendapatkan Parent Level 1(Level kedua karena dimulai dari 0).

WITH CSource
AS
(
    SELECT e.ID,e.Parent,
        0 AS Level, cast(NULL as CHAR(4)) as Root1
    FROM @Source AS e
    WHERE e.Parent IS NULL
    UNION ALL
    SELECT e.ID,e.Parent,
        Level + 1, case when Level + 1=1 then e.ID else d.Root1 end
    FROM @Source AS e
    INNER JOIN CSource AS d
        ON e.Parent = d.ID
)

SELECT *
FROM CSource
--WHERE ID='as04'

Cukup mudah bukan?

Sampai jumpa pada coretan selanjutnya :)

Published Jun 20 2011, 11:10 AM by cahyo
Filed under: , ,

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems