Frage

Ich habe eine gespeicherte Prozedur, die eine SELECT-Anweisung ausführt. Ich würde von einem Datumsfeld meine Ergebnisse bestellt mögen und alle Datensätze angezeigt werden mit NULL Daten zuerst und dann die neuesten Termine.

Die Anweisung sieht wie folgt aus:

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

Jetzt werden diese alle Datensätze angezeigt werden mit NULL Submission ersten Termine, aber wenn ich auf die Zeilen erhalten, die Datumswerte in ihnen, sie sind nicht die letzten Tage, in der Ansicht.

Wenn ich ASC mit DESC ersetzen, dann bekomme ich die Daten in der Reihenfolge, die ich will, aber die NULL-Werte sind am unteren Rand meines Ergebnismenge.

Gibt es eine Möglichkeit meine Frage so zu strukturieren, dass ich die Null-Werte an der Spitze angezeigt werden und dann, wenn Datumswerte sind, bestellen sie absteigend jüngsten bis zum ältesten?

War es hilfreich?

Lösung

@ Chris, haben Sie fast es.

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

[Edit: #Eppz mich gebeten, den Code oben als zur Zeit gezeigt zwicken]

Ich persönlich bevorzuge diese viel besser als „magische Zahlen“ zu schaffen. Magische Zahlen sind fast immer ein Problem auf sich zukommen.

Andere Tipps

Sie können etwas tun, wie dies die NULL ist am Boden setzen:

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

Standard SQL (ISO / IEC 9075-2: 2003 oder später - 2008) sieht Folgendes vor:

ORDER BY SomeColumn NULLS FIRST

Die meisten DBMS nicht wirklich dies noch unterstützen, AFAIK.

Versuch

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"

try this

  

SELECT a, b, c, [Erstellungsdatum]   VON   someView   SORTIEREN NACH   isnull ([Erstellungsdatum], gegossen ( '1770.01.01' als Datetime)) ASC

Ich weiß, das ist alt, aber wenn ich es gefunden habe, bemerkte ich die akzeptierte Lösung, https://stackoverflow.com/a/ 821856/7177892 könnte, indem sie das Ergebnis der CASE-Anweisung entweder heute (GETDATE ()) oder das aktuelle Datum vereinfacht werden.

Original:

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

Vereinfacht:

ORDER BY (CASE WHEN [Submission Date] IS NULL 
               THEN GETDATE() 
               ELSE [Submission Date] 
          END) DESC
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top