SQL – Tekrar Eden Kolon Değerleri Göstermemek

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir