Tekrarlanan CTE ve Hiyerarşik Yapı
Tablomuzu oluşturalım,
create table Kategori ( KategoriID int identity(1,1), UstKategoriID int, Ad nvarchar(20), constraint pkKategoriID primary key(KategoriID), constraint fkKategoriUstKategoriID foreign key(UstKategoriID) references Kategori )
Örnek verilerimizi girelim.
insert Kategori (Ad) VALUES('Bilgisayar')
insert Kategori (Ad) VALUES('Telefon')
insert Kategori (Ad) VALUES('saat')
insert Kategori (UstKategoriID, Ad) VALUES(1,'Masaüstü Bilgisayar')
insert Kategori (UstKategoriID, Ad) VALUES(1,'Dizüstü Bilgisayar')
insert Kategori (UstKategoriID, Ad) VALUES(1,'Netbook')
insert Kategori (UstKategoriID, Ad) VALUES(1,'Server')
insert Kategori (UstKategoriID, Ad) VALUES(2,'Tek Sim Kartlı')
insert Kategori (UstKategoriID, Ad) VALUES(2,'Çift Sim Kartlı')
insert Kategori (UstKategoriID, Ad) VALUES(2,'3 Sim Kartlı')
insert Kategori (UstKategoriID, Ad) VALUES(3,'Analog')
insert Kategori (UstKategoriID, Ad) VALUES(3,'Dijital')
insert Kategori (UstKategoriID, Ad) VALUES(3,'GPSli')
insert Kategori (UstKategoriID, Ad) VALUES(3,'Mp3 çalarlı')
ID’si 8 olan kategorimizin üstündekilerle beraber select sorgumuzu çalıştıralım
;WITH cte AS (
SELECT 0 AS sira, KategoriID, Ad, UstKategoriID
FROM Kategori WHERE KategoriID=8
UNION ALL
SELECT p.sira + 1, c.KategoriID, c.Ad, c.UstKategoriID
FROM Kategori c
INNER JOIN cte p ON p.UstKategoriID = c.KategoriID
)
SELECT
KategoriID,
Ad,
UstKategoriID
FROM cte ORDER BY sira DESC