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?

Était-ce utile?

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