Fall in der Reihenfolge durch wenige Spalten
-
18-09-2019 - |
Frage
Mit einem Fallblock muss ich wählen, wie ich meine SQL 2008-Abfrage bestellen kann, von [status] ASC, [date] DESC
oder nur [date] DESC
.
Ich weiß nur, wie man eine Spalte verwendet:
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0
THEN R.[date] END DESC,
CASE WHEN @flag = 1
THEN R.[status] END ASC
Wie benutze ich beide Spalten im zweiten Fall?
Lösung
- Wenn Ihre Flagge 0 ist, bestellen wir zu (Null, R.Date Desc).
- Wenn nicht, werden wir By bestellen (R.Status, R.Date Desc)
Verwenden Sie den Fallausdruck, um einen neuen Wert für die Bestellung zu "projizieren".
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN r.Status ELSE null END,
r.[date] desc
Andere Tipps
Um die bedingte Bestellung einzugeben, wiederholen Sie die Fallanweisung einfach.
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
;
In Ihrem Fall bedeutet die Überlappung von "Datum" jedoch, dass Sie es wie David Bs Kommentar vereinfachen können.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow