CASE ORDER BY quelques colonnes
-
18-09-2019 - |
Question
L'utilisation d'un bloc de cas, je dois choisir comment commander ma requête SQL 2008, par [status] ASC, [date] DESC
ou tout simplement [date] DESC
.
Je sais seulement comment utiliser une colonne:
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0
THEN R.[date] END DESC,
CASE WHEN @flag = 1
THEN R.[status] END ASC
Comment utiliser les deux colonnes en second cas?
La solution
- Si votre drapeau est 0, nous allons commander par (null, r.date desc).
- Sinon, nous allons par ordre (r.Status, r.date desc)
Utilisez l'expression CASE pour "projet" une nouvelle valeur pour la commande.
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN r.Status ELSE null END,
r.[date] desc
Autres conseils
En règle générale pour mettre la commande conditionnelle, vous suffit de répéter l'instruction CASE.
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
;
Mais dans votre cas, le chevauchement de « date » signifie que vous pouvez simplifier comme le commentaire de David B.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow