استعلام 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 لاحتياجات تقارير أكثر تعقيدًا. استمتع بالاستعلام!