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?

War es hilfreich?

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
scroll top