SQL Pivot
Tablonun normal görüntüsü

Tablonun normal görüntüsü

Şirketlerde özellikle üst yönetim çok yakından takip ettiği raporlar vardır. Bu raporlarda bilgiler genellikle farklı tablolarda duran kayıtların bir araya gelmesiyle alt alta olacak şekilde sıralanır. Yönetim katına bu şekilde rapor sunulamayacağına göre bu verileri anlamlı bir hale getirmek için ek bir kod geliştirmesine gerek vardır. Bu yazıda anlattığım senaryo başıma geldiği için uygun ve performanslı olacak bir çözüm aradım. İlk bulduğum çözümler dinamik sql yazılması ile ilgili olduğu için biraz daha araştırmaya çalıştım ve sonunda buldum. SQL üzerinde pivot yaparak kayıtları satır bazından kolon bazına çekmeyi başardım.

Tablonun içerisinde alt alta olan bilgileri çektikten sonra esas sorun bunların yanına tarih bilgisini eklemek oldu.

PIVOT ile çekilmiş veriler.

PIVOT ile çekilmiş veriler.

Ancak tam olarak istenen raporda; sayıların ve tarihlerin bir arada tek bir hücrede olmasıydı. Bunu yapabilmek için ufak ve hızlı bir yöntem olarak verilerin hepsini DataTable üzerine aldım, tabloların Primary Key alanlarını CityName olarak belirledim ve merge yaptım. Sonuç tam olarak istediğim gibi oldu.

Verileri istediğim gibi birleştirdikten sonraki kısım tamamen ön yüzde kullandığım kütüphane ile yaptığım ufak dokunuşlardan ibaret. 🙂

Eklemem gereken bazı uyarılar var, onları da unutmadan dile getireyim. İlk olarak pivot kullanıldığında sabit bir sorgu yazmış oluyorsunuz. Tablo veya View üzerinden bir kolon silindiğinde pivot bozulacaktır. Yeni bir kolon eklendiğinde bu şekilde bir sorun olmayacak. İkinci olarak pivot yaptığınız tablo veya view üzerinde performans sıkıntınız var ise mutlaka öncesinde index çalışması yapınız. Pivot işlemi tabloyu yeterince yoruyor zaten. 😉

Yorumlayın