Si vous exécutez une requête dans SQL Server et que vous obtenez l'erreur suivante…
Msg 104, Level 16, State 1, Line 8
ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.
… vous devriez vérifier votre instruction SQL - vous avez probablement omis une colonne de votre SELECT
liste.
Comme le message d'erreur l'indique, vous ne verrez probablement cette erreur que si vous exécutez une requête contenant un UNION
, INTERSECT
ou EXCEPT
opérateur.
Ajoutez simplement la colonne à votre SELECT
liste devrait résoudre le problème.
Exemple
Voici un exemple de génération de l'erreur.
SELECT
CatName
FROM Cats
UNION ALL
SELECT
DogName
FROM Dogs
ORDER BY CatId;
Résultat :
Msg 104, Level 16, State 1, Line 8 ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.
Le problème ici, c'est que j'essaie de commander par le CatId
colonne, mais je ne sélectionne pas réellement cette colonne dans mon SELECT
liste.
Le moyen le plus simple de résoudre ce problème est d'ajouter cette colonne à mon SELECT
liste.
SELECT
CatId AS PetID,
CatName AS PetName
FROM Cats
UNION ALL
SELECT
DogId AS PetID,
DogName AS PetName
FROM Dogs
ORDER BY PetId;
Résultat :
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
En fait, dans mon cas, je sélectionne des colonnes avec des noms différents (CatId
vs DogId
, CatName
vs DogName
), j'ai donc décidé d'utiliser un alias pour ces colonnes (PetId
et PetName
). Dans ce cas, je peux ORDER BY
le nom d'alias (PetId
).