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