سؤال

باستخدام كحرف - ثم حظر، أحتاج إلى اختيار كيفية طلب استعلام SQL 2008 الخاص بي [status] ASC, [date] DESC أو فقط [date] DESC.

أنا أعرف فقط كيفية استخدام عمود واحد:

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0
        THEN R.[date] END DESC,
    CASE WHEN @flag = 1
        THEN R.[status] END ASC

كيفية استخدام كلا الأعمدة في الحالة الثانية؟

هل كانت مفيدة؟

المحلول

  • إذا كان علمك 0، فسوف نطلب حسب (NULL، R.DATE DESC).
  • إذا لم يكن كذلك، فسوف نطلب بواسطة (R.Status، R.Date DESC)

استخدم تعبير الحالة إلى "مشروع" قيمة جديدة للطلب.

SELECT *
FROM table
ORDER BY
  CASE WHEN @flag = 0 THEN r.Status ELSE null END,
  r.[date] desc

نصائح أخرى

عادة لوضع الطلب الشرطي، أنت فقط كرر بيان القضية.

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0 THEN R.[date] END DESC,
    CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
    CASE WHEN @flag = 1 THEN R.[status] END ASC
;

ولكن في حالتك، فإن تداخل "التاريخ" يعني أنه يمكنك تبسيطه مثل تعليق ديفيد ب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top