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.