SQL CASE dans la clause ORDER BY pour trier les enregistrements par la valeur la plus basse de 2 colonnes


Exemple

Imaginez que vous ayez besoin de trier les enregistrements par la valeur la plus basse de l'une des deux colonnes. Certaines bases de données peuvent utiliser une fonction MIN() ou LEAST() non agrégée LEAST() pour cela ( ... ORDER BY MIN(Date1, Date2) ), mais en SQL standard, vous devez utiliser une expression CASE .

L'expression CASE dans la requête ci-dessous examine les colonnes Date1 et Date2 , vérifie quelle colonne a la valeur la plus faible et trie les enregistrements en fonction de cette valeur.

Données d'échantillon

Id Date1 Date2
1 2017-01-01 2017-01-31
2 2017-01-31 2017-01-03
3 2017-01-31 2017-01-02
4 2017-01-06 2017-01-31
5 2017-01-31 2017-01-05
6 2017-01-04 2017-01-31

Question

SELECT Id, Date1, Date2
FROM YourTable
ORDER BY CASE 
           WHEN COALESCE(Date1, '1753-01-01') < COALESCE(Date2, '1753-01-01') THEN Date1 
           ELSE Date2 
         END

Résultats

Id Date1 Date2
1 2017-01-01 2017-01-31
3 2017-01-31 2017-01-02
2 2017-01-31 2017-01-03
6 2017-01-04 2017-01-31
5 2017-01-31 2017-01-05
4 2017-01-06 2017-01-31

Explication

Comme vous voyez que la ligne avec Id = 1 est la première, parce que Date1 a l'enregistrement le plus bas de la table entière 2017-01-01 , la ligne où Id = 3 est la seconde parce que Date2 est égale à 2017-01-02 etc.

Nous avons donc trié les enregistrements de 2017-01-01 à 2017-01-01 en 2017-01-06 croissant et aucune attention sur laquelle une colonne Date1 ou Date2 sont ces valeurs.