حالة بالترتيب حسب عدد قليل من الأعمدة
-
18-09-2019 - |
سؤال
باستخدام كحرف - ثم حظر، أحتاج إلى اختيار كيفية طلب استعلام 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
;
ولكن في حالتك، فإن تداخل "التاريخ" يعني أنه يمكنك تبسيطه مثل تعليق ديفيد ب.
لا تنتمي إلى StackOverflow