Raporlama ekranlarında özellikle hiyerarşik verilerin bulunduğu bir kolonda tekrar eden değerleri göstermeyiz. Bunu Web veya Windows tarafında yapmak tercih edilir. Peki SQL tarafında bunu kolayca nasıl sağlayabiliriz. Makalelerde kullandığımız Kategori ve Urun tablosunu düşünelim.
Bu tablodaki verileri aşağıdaki şekilde listelemek istiyoruz.
Şekilde görüldüğü üzere her ürün grubunun altında ürünler listelenmiş ancak grup isimleri bir kere yazılmış. Bu sonucu elde etmek için öncelikle daha önce örneklendirdiğimiz OVER() fonksiyonunu kullanarak Urun tablosunda her kategorinin en düşük veya en yüksek UrunId’sini bulacağız.
SELECT KategoriId, MIN(UrunId) OVER (PARTITION BY KategoriId) IlkUrunId, UrunId, UrunAdi FROM Urun
Ardından bu sonucu derived-table olarak kullanıp o anda okunan UrunId’si IlkUrunId değerine eşitse Kategori bilgisini yazacağız değilse yazmayacağız.
SELECT (CASE WHEN UrunId = IlkUrunId THEN KategoriId ELSE '' END) KategoriId, UrunId, UrunAdi FROM ( SELECT KategoriId, MIN(UrunId) OVER (PARTITION BY KategoriId) IlkUrunId, UrunId, UrunAdi FROM Urun) U ORDER BY U.KategoriId,UrunId
Sorguyu biraz daha iyileştirip KategoriId yerine Kategori isimlerini yazdıralım.
SELECT (CASE WHEN UrunId = IlkUrunId THEN K.KategoriAdi ELSE '' END) KategoriAdi, UrunId, UrunAdi, ISNULL(Fiyat,'0') Fiyat FROM Kategori K INNER JOIN ( SELECT KategoriId, MIN(UrunId) OVER (PARTITION BY KategoriId) IlkUrunId, UrunId, UrunAdi, Fiyat FROM Urun ) U ON K.KategoriId=U.KategoriId ORDER BY U.KategoriId,U.UrunId
Böylece istediğimiz sonucu elde etmiş olduk.