البرمجة

استخدام Case في SQL Server

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

sql
CREATE TABLE YourTableName ( id INT, date INT, value VARCHAR(10) ); INSERT INTO YourTableName (id, date, value) VALUES (1, 1, null), (1, 2, 'a'), (1, 3, 'b'), (1, 4, null), (2, 1, null), (2, 2, null), (2, 3, null), (2, 4, null), (2, 5, null);

الآن، يمكنك استخدام الاستعلام التالي للحصول على النتائج المطلوبة:

sql
SELECT id, CASE WHEN MAX(CASE WHEN value IS NULL THEN date ELSE 0 END) > MAX(CASE WHEN value IS NOT NULL THEN date ELSE 0 END) THEN MAX(CASE WHEN value IS NULL THEN date ELSE 0 END) ELSE MAX(CASE WHEN value IS NOT NULL THEN date ELSE 0 END) END AS date, MAX(value) AS value FROM YourTableName GROUP BY id;

هذا الاستعلام يستخدم عبارة CASE للتحقق من قيمة العمود value، وإذا كانت القيمة NULL في جميع الصفوف لل id معين، يتم استخدام أقصى قيمة لل date في تلك ال id. وإذا كان هناك قيم غير NULL، يتم استخدام أقصى قيمة لل date مع تلك القيم.

يرجى تغيير YourTableName بالجدول الفعلي الخاص بك.

المزيد من المعلومات

لفهم الاستعلام الذي تم توضيحه أعلاه بشكل أفضل، يمكن تقسيمه إلى عدة أقسام:

  1. CASE WHEN value IS NULL THEN date ELSE 0 END: هذا الجزء يستخدم عبارة CASE لإعادة قيمة العمود date إذا كانت قيمة العمود value NULL، وإلا يعيد القيمة صفر.

  2. MAX(CASE WHEN value IS NULL THEN date ELSE 0 END): هذا الجزء يستخدم الدالة MAX للحصول على أقصى قيمة لل date عندما تكون قيمة ال value NULL.

  3. MAX(CASE WHEN value IS NOT NULL THEN date ELSE 0 END): هذا الجزء يستخدم الدالة MAX للحصول على أقصى قيمة لل date عندما تكون قيمة ال value غير NULL.

  4. CASE WHEN ... THEN ... ELSE ... END AS date: هذا الجزء يستخدم عبارة CASE مرة أخرى لاختيار أكبر قيمة بين أقصى قيمة لل date عندما تكون قيمة value NULL وأقصى قيمة لل date عندما تكون قيمة value غير NULL.

  5. MAX(value) AS value: هذا الجزء يستخدم الدالة MAX للحصول على قيمة value الكبيرة بين الصفوف التي تحتوي على نفس ال id.

باختصار، يستخدم الاستعلام ال CASE statements لفحص القيم في العمود value ويختار أكبر قيمة لل date بناءً على ذلك، مع الحفاظ على القيمة value للصف الذي يحتوي على أقصى قيمة لل date المختارة.

زر الذهاب إلى الأعلى