Veri mühendisliği
PIVOT, UNPIVOT ve koşullu aggregation
Rapor şeklini değiştirirken grain’i koru.
Kavramı anlayalım
PIVOT, seçilen değerleri sütunlara taşıyıp aggregation uygular. Kaynakta gereksiz sütun bırakırsan örtük gruplama beklemediğin kadar satır üretir. Önce yalnız grup anahtarı, pivot anahtarı ve ölçüden oluşan kaynak hazırla. CASE ile koşullu aggregation çoğu raporda daha görünür ve esnektir.
UNPIVOT sütunları satırlara taşır; NULL değerlerin elenmesi davranışını dikkate al. Dinamik PIVOT yapısal sütun listesi üretir: izinli tanımlayıcılar, QUOTENAME ve güvenli değer parametreleri gerekir. Bu ders sabit Paid/Pending/Cancelled durumlarını kullanır. Sıfır ile veri yok anlamındaki NULL aynı değildir; ancak count raporunda sıfır göstermek çoğu zaman açık bir tercihtir.
Dashboard sütunlarını ve uzun formatı hazırlamak için.
PIVOT kaynağında fazla sütun bırakmak.
Aynı konu. Üç farklı derinlik.
SELECT CustomerId, SUM(CASE WHEN Status = 'Paid' THEN 1 ELSE 0 END) AS Paid FROM lab.SalesOrder GROUP BY CustomerId;Açık koşullu aggregation kullanılır.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Paid ve Pending sayısını CASE ile müşteri bazında getir.
Çözümü ve açıklamasını göster
SELECT CustomerId, SUM(CASE WHEN Status = 'Paid' THEN 1 ELSE 0 END) AS Paid, SUM(CASE WHEN Status = 'Pending' THEN 1 ELSE 0 END) AS Pending FROM lab.SalesOrder GROUP BY CustomerId;Cancelled satırları gruba katılır ama bu iki ölçüyü artırmaz.