SQL Server Indonesia User Groups Community June 2011 - Posts - 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

June 2011 - Posts

  • {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 :)

    Posted Jun 20 2011, 11:10 AM by cahyo with no comments
    Filed under: , ,
More Posts
Powered by Community Server (Commercial Edition), by Telligent Systems