En parcourant cette section de commentaires, je suis tombé sur deux modèles différents répondant à la question. Malheureusement pour SQL 2012, le deuxième modèle ne fonctionne pas, voici donc mon «travail»
Trier par sur une colonne commune
C'est le cas le plus simple que vous puissiez rencontrer. Comme de nombreux utilisateurs l'ont souligné, tout ce que vous avez à faire est d'ajouter un Order By
à la fin de la requête
SELECT a FROM table1
UNION
SELECT a FROM table2
ORDER BY field1
ou
SELECT a FROM table1 ORDER BY field1
UNION
SELECT a FROM table2 ORDER BY field1
Trier par sur différentes colonnes
C'est là que ça devient compliqué. En utilisant SQL 2012, j'ai essayé le premier article et cela ne fonctionne pas.
SELECT * FROM
(
SELECT table1.field1 FROM table1 ORDER BY table1.field1
) DUMMY_ALIAS1
UNION ALL
SELECT * FROM
(
SELECT table2.field1 FROM table2 ORDER BY table2.field1
) DUMMY_ALIAS2
Suite à la recommandation dans le commentaire, j'ai essayé ceci
SELECT * FROM
(
SELECT TOP 100 PERCENT table1.field1 FROM table1 ORDER BY table1.field1
) DUMMY_ALIAS1
UNION ALL
SELECT * FROM
(
SELECT TOP 100 PERCENT table2.field1 FROM table2 ORDER BY table2.field1
) DUMMY_ALIAS2
Ce code a bien compilé mais le DUMMY_ALIAS1
et DUMMY_ALIAS2
écrasé le Order By
établi dans l' Select
instruction qui le rend inutilisable.
La seule solution à laquelle je pouvais penser, qui fonctionnait pour moi, était de ne pas utiliser de syndicat, mais plutôt de faire exécuter les requêtes individuellement et de les traiter ensuite. Donc, en gros, ne pas utiliser un Union
quand vous le souhaitezOrder By