Aylara Göre Ürün Satışlarını Karşılaştıran SQL Sorgusu: Bir Rehber

Ürün satış verilerini yönetirken, yıllar arasında aylık satış rakamlarını karşılaştırmanın nasıl yapılacağına dair net bir anlayışa sahip olmak, etkili raporlama için kritik öneme sahiptir. İster bir perakende dükkanı işletiyor olun, ister bir kurumsal varlık için satış verilerini analiz ediyor olun, satış eğilimlerini hızlı bir şekilde belirlemek, değerli içgörüler sağlayabilir. Bu yazıda, iki ardışık yıl için aylara göre ürün satışlarını karşılaştıran bir SQL sorgusu oluşturmayı keşfedeceğiz ve sıfır satış olan ayların net bir şekilde görüntülendiğinden emin olacağız.

Problemi Anlamak

Aşağıdaki gibi yapılandırılmış bir veri setiyle karşılaşabilirsiniz:

Kategori | Gelir    | Yıl | Ay
Bisiklet | 10,000   | 2008 | 1
Bisiklet | 12,000   | 2008 | 2
Bisiklet | 12,000   | 2008 | 3
Bisiklet | 15,000   | 2008 | 4
Bisiklet | 11,000   | 2007 | 2
Bisiklet | 11,500   | 2007 | 3
Bisiklet | 15,400   | 2007 | 4

Bu veri setinden, 2007 ve 2008 yılları için Ocak’tan Aralık’a kadar elde edilen gelirleri karşılaştıran bir rapor oluşturmak istiyorsunuz. Amaç, satış gerçekleşmeyen ayların her iki sütunda ‘0’ ile doldurulmasıdır; bu durum, karar verme için daha net bir karşılaştırmalı manzara yaratır.

İstenilen çıktı şu şekilde görünebilir:

Kategori | Ay | Bu Yıl Gelir | Geçen Yıl Gelir
Bisiklet | 1  | 10,000       | 0
Bisiklet | 2  | 12,000       | 11,000
Bisiklet | 3  | 12,000       | 11,500
Bisiklet | 4  | 0            | 15,400

SQL Sorgusunu Oluşturma

Bunu başarmak için, SQL’in güçlü CASE deyimini uygun toplama fonksiyonları ile birleştirerek kullanacağız. Ayrıca, satış verilerini almak istediğimiz tüm ayları içeren bir yardımcı tablo oluşturmamız gerekecek, hatta satış kaydı olmasa bile.

Adım 1: Tabloları Kurma

Aşağıdaki tablolara sahip olmalısınız:

  • Satış Tablosu: Kategoriler, gelirler, yıllar ve aylar hakkında veri tutar.
  • Zaman Tablosu (tm): Raporlamak istediğiniz tüm olası yıl ve ay kombinasyonlarını içerir.

Adım 2: Temel Sorgu Yapısı

Boş satır olmadan ürün satışlarını almak için basitleştirilmiş bir SQL sorgusu:

SELECT
    Kategori,
    Ay,
    SUM(CASE WHEN YIL = 2008 THEN Gelir ELSE 0 END) AS Bu_Yıl_Gelir,
    SUM(CASE WHEN YIL = 2007 THEN Gelir ELSE 0 END) AS Geçen_Yıl_Gelir
FROM
    satış
WHERE
    YIL IN (2008, 2007)
GROUP BY
    Kategori,
    Ay
ORDER BY
    Ay;

Açıklama:

  • SUM ile CASE: Bu, belirtilen koşullara göre her yılın gelirlerini toplar – iki yılı ayırmanızı sağlar.
  • Gruplama: Sonuçlar, netlik için Kategori ve Ay ile düzenlenir.

Adım 3: Boş Satırları Dahil Etme

Sıfır satış olan ayları da dahil etmek istiyorsanız, sorgunuzu hem satış hem de tm tablosunu çekecek şekilde ayarlamanız gerekir. İşte nasıl:

SELECT
    fill.Kategori,
    fill.Ay,
    SUM(CASE WHEN YIL = 2008 THEN Gelir ELSE 0 END) AS Bu_Yıl_Gelir,
    SUM(CASE WHEN YIL = 2007 THEN Gelir ELSE 0 END) AS Geçen_Yıl_Gelir
FROM
    satış
RIGHT JOIN (SELECT DISTINCT Kategori, Yıl, Ay FROM satış CROSS JOIN tm) AS fill
ON fill.Kategori = satış.Kategori AND fill.Yıl IN (2008, 2007)
GROUP BY
    fill.Kategori,
    fill.Ay
ORDER BY
    fill.Ay;

Açıklama:

  • RIGHT JOIN: Bu, tm tablosundaki tüm ayların dahil edilmesini sağlar, satış verisi olmayanlar da dahil.
  • Gruplama ve Sıralama: Aynı gruplaşma ve sıralama, net bir rapor elde etmeye yardımcı olur.

Sonuç

Bu makalede gösterilen teknikleri kullanarak, sıfır satış hesaplamalarını da dikkate alarak, farklı yıllar arasında aylara göre ürün satışlarını karşılaştıran bir rapor oluşturabileceksiniz. Bu yaklaşım sadece kapsamlı veri analizine yardımcı olmakla kalmaz, aynı zamanda genel raporlama yeteneklerini de geliştirir.

Daha fazla okuma ve ileri düzey işlevler için, daha karmaşık raporlama ihtiyaçları için SQL Server 2005’te CASE ifadeleri ve PIVOT kullanımını incelemeyi düşünün. İyi sorgulamalar!