ORDER BY التاريخ تظهر بالقيم الخالية أولا ثم مواعيد الأخيرة

StackOverflow https://stackoverflow.com/questions/821798

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي الإجراء المخزن الذي ينفذ العبارة حدد. أود بلدي نتيجة مرتبة حسب حقل تاريخ وعرض كافة السجلات التي تحتوي على NULL يعود أولا ثم تواريخ الأخيرة.

والبيان يبدو مثل هذا:

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC

والآن هذا سيتم عرض كافة السجلات التي تحتوي على NULL تقديم تواريخ البداية، ولكن عندما أحصل على الصفوف التي تحتوي على قيم التاريخ فيها، فهي ليست تواريخ أحدث في طريقة العرض.

إذا يمكنني استبدال ASC مع DESC، ثم أحصل التواريخ في ترتيب أريد، ولكن القيم NULL هي في الجزء السفلي من بلدي مجموعة النتائج.

هل هناك أي طريقة لهيكلة الاستعلام بلدي حتى أستطيع أن عرض القيم الخالية في الاعلى و من ثم عندما تكون هناك قيم التاريخ، لترتيبها تنازليا الأخير إلى الأقدم؟

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

المحلول

و @كريس، لديك تقريبا.

ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, 
         [Submission Date] DESC

[تحرير: طلب مني #Eppz أن يعدل التعليمات البرمجية أعلاه كما هو مبين حاليا]

وأنا شخصيا أفضل هذا أفضل بكثير من إنشاء "الأرقام السحرية". الأرقام السحرية هي دائما تقريبا مشكلة تنتظر أن يحدث.

نصائح أخرى

ويمكنك أن تفعل شيئا من هذا القبيل وضع NULL في أسفل:

ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC

وستاندرد SQL (ISO / IEC 9075-2: 2003 أو في وقت لاحق - 2008) ينص على:

ORDER BY SomeColumn NULLS FIRST

ومعظم نظم إدارة قواعد البيانات لا تدعم هذا الواقع حتى الآن، AFAIK.

والمحاولة

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY isnull([Submission Date],cast('2079/01/01' as datetime)) ASC
OrderBy="ColumnName = NULL desc, ColumnName desc"

وهذه محاولة

<اقتباس فقرة>   

وSELECT أ، ب، ج، [تاريخ التقديم]   من عند   someView   ترتيب حسب   ISNULL ([تاريخ التقديم]، ويلقي ( '1770/01/01' كما التاريخ والوقت)) ASC

وأعرف أن هذا هو القديم، ولكن عندما وجدت أنها لاحظت حل مقبول، https://stackoverflow.com/a/ 821856/7177892 ، يمكن تبسيط بجعل نتيجة لبيان حالة تكون إما اليوم (GETDATE ()) أو التاريخ الفعلي.

والأصل:

ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, 
         [Submission Date] DESC

والمبسطة:

ORDER BY (CASE WHEN [Submission Date] IS NULL 
               THEN GETDATE() 
               ELSE [Submission Date] 
          END) DESC
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top