استعلام SQL لمقارنة مبيعات المنتجات حسب الشهر: دليل

عندما يتعلق الأمر بإدارة بيانات مبيعات المنتجات، فإن فهم كيفية مقارنة أرقام المبيعات الشهرية عبر السنوات يعد أمرًا بالغ الأهمية للإبلاغ الفعال. سواء كنت تدير متجر بيع بالتجزئة أو تقوم بتحليل بيانات المبيعات لكيان Corporate، فإن القدرة على التعرف بسرعة على اتجاهات المبيعات يمكن أن توفر رؤى لا تقدر بثمن. في هذه المقالة، سنستعرض كيفية بناء استعلام SQL لمقارنة مبيعات المنتجات حسب الشهر لسنتين متتاليتين، مع ضمان عرض الأشهر التي لا توجد بها مبيعات بوضوح.

فهم المشكلة

قد تواجه سيناريو حيث لديك مجموعة بيانات تتبع الهيكل التالي:

الفئة | الإيرادات | السنة | الشهر
دراجات | 10,000 | 2008 | 1
دراجات | 12,000 | 2008 | 2
دراجات | 12,000 | 2008 | 3
دراجات | 15,000 | 2008 | 4
دراجات | 11,000 | 2007 | 2
دراجات | 11,500 | 2007 | 3
دراجات | 15,400 | 2007 | 4

من هذه المجموعة، تريد إنشاء تقرير يقارن الإيرادات الناتجة عن يناير إلى ديسمبر للسنوات 2007 و2008. الهدف هو ملء أي أشهر لا توجد بها مبيعات برقم ‘0’ في كلا العمودين، مما يخلق مشهدًا مقارنًا أوضح لاتخاذ القرارات.

قد يبدو المخرجات المرغوبة كما يلي:

الفئة | الشهر | الإيرادات هذه السنة | الإيرادات السنة الماضية
دراجات | 1 | 10,000 | 0
دراجات | 2 | 12,000 | 11,000
دراجات | 3 | 12,000 | 11,500
دراجات | 4 | 0 | 15,400

بناء استعلام SQL

لتحقيق ذلك، سنستخدم عبارة CASE القوية في SQL بالتعاون مع الدالات التجميعية المناسبة. سنحتاج أيضًا إلى إعداد جدول مساعد يتضمن جميع الأشهر التي نريد بيانات المبيعات لها، حتى في حال عدم تسجيل مبيعات.

الخطوة 1: إعداد الجداول الخاصة بك

يجب أن يكون لديك الجداول التالية تحت تصرفك:

  • جدول المبيعات: يحتوي على بيانات عن الفئات، الإيرادات، السنوات، والأشهر.
  • جدول الزمن (tm): يحتوي على جميع التركيبات الممكنة من السنوات والأشهر التي ترغب في الإبلاغ عنها.

الخطوة 2: هيكل الاستعلام الأساسي

إليك استعلام SQL مبسط لجلب مبيعات المنتجات بدون صفوف فارغة:

SELECT
    الفئة,
    الشهر,
    SUM(CASE WHEN YEAR = 2008 THEN الإيرادات ELSE 0 END) AS الإيرادات_هذه_السنة,
    SUM(CASE WHEN YEAR = 2007 THEN الإيرادات ELSE 0 END) AS الإيرادات_السنة_الماضية
FROM
    المبيعات
WHERE
    YEAR IN (2008, 2007)
GROUP BY
    الفئة,
    الشهر
ORDER BY
    الشهر;

الشرح:

  • SUM مع CASE: هذا يجمع الإيرادات لكل سنة بناءً على الشروط المحددة - مما يتيح لك التمييز بين العامين.
  • تجميع: النتائج منظمة حسب الفئة و الشهر للوضوح.

الخطوة 3: تضمين الصفوف الفارغة

إذا كنت ترغب في تضمين أشهر لا توجد بها مبيعات، يجب تعديل الاستعلام لضمان سحبه من كل من جدول المبيعات و جدول tm. إليك الطريقة:

SELECT
    fill.الفئة,
    fill.الشهر,
    SUM(CASE WHEN YEAR = 2008 THEN الإيرادات ELSE 0 END) AS الإيرادات_هذه_السنة,
    SUM(CASE WHEN YEAR = 2007 THEN الإيرادات ELSE 0 END) AS الإيرادات_السنة_الماضية
FROM
    المبيعات
RIGHT JOIN (SELECT DISTINCT الفئة, السنة, الشهر FROM المبيعات CROSS JOIN tm) AS fill
ON fill.الفئة = المبيعات.الفئة AND fill.sana IN (2008, 2007)
GROUP BY
    fill.الفئة,
    fill.الشهر
ORDER BY
    fill.الشهر;

الشرح:

  • RIGHT JOIN: يضمن أن جميع الأشهر من جدول tm مشمولة، حتى تلك التي لا تحتوي على بيانات مبيعات.
  • التجميع والترتيب: الحفاظ على نفس التجميع والترتيب يساعد في استخلاص تقرير واضح.

الخاتمة

من خلال استخدام التقنيات الموضحة في هذه المقالة، ستتمكن من إنشاء تقرير يقارن مبيعات المنتجات حسب الشهر عبر سنوات مختلفة، حتى مع الأخذ في الاعتبار مبيعات صفرية. هذه الطريقة لا تساعد فقط في تحليلات البيانات الشاملة ولكن أيضًا تعزز قدرات الإبلاغ العامة.

للمزيد من القراءة والوظائف المتقدمة، اعتبر فحص الموارد الإضافية حول استخدام عبارات CASE و PIVOT في SQL Server 2005 لاحتياجات تقارير أكثر تعقيدًا. استمتع بالاستعلام!