Presque identique à la réponse de Dan, mais pour SQL Server (ou les normes du système de base de données SQL):
SELECT
ID,
Status
FROM
temp
ORDER BY
CASE Status
WHEN 'completed' THEN 1
WHEN 'approved' THEN 2
WHEN 'paid' THEN 3
WHEN 'cancel' THEN 4
END
Autres préoccupations -
1) Le titre de cette question semble être trompeuse, car il n'y a pas t à propos de la clause GROUP BY, et,
2) Je pense que vous avez une idée fausse à propos UNION
aussi - il n'y a aucune garantie de l'ordre dans lequel les résultats seront de retour d'un UNION
ou UNION ALL
- Dans le cas UNION
, il y a probable être une opération de tri pour aider le serveur à éliminer les doublons, mais quel tri est effectué est entièrement à la hauteur du serveur et vous ne devriez pas compter sur un tel tri toujours nécessaire. Pour un UNION ALL
, imaginez si la première requête est une grande requête, nécessitant beaucoup d'E/S, et la deuxième requête est triviale (par exemple, toutes les données requises sont déjà en mémoire). Une optimisation évidente pour le serveur consiste à renvoyer les résultats de la deuxième requête alors qu'il effectue toujours des E/S pour le premier.
remercie mon ami fonctionne bien. –