Se stai eseguendo una query in SQL Server e ricevi il seguente errore...
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.
…dovresti controllare la tua istruzione SQL:probabilmente hai omesso una colonna dal tuo SELECT
elenco.
Come suggerisce il messaggio di errore, probabilmente vedrai questo errore solo se stai eseguendo una query che contiene un UNION
, INTERSECT
o EXCEPT
operatore.
Semplicemente aggiungendo la colonna al tuo SELECT
list dovrebbe risolvere il problema.
Esempio
Ecco un esempio di generazione dell'errore.
SELECT
CatName
FROM Cats
UNION ALL
SELECT
DogName
FROM Dogs
ORDER BY CatId;
Risultato:
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.
Il problema qui è che sto cercando di ordinare con il CatId
colonna, ma in realtà non sto selezionando quella colonna nel mio SELECT
elenco.
Il modo più semplice per risolvere questo problema è aggiungere quella colonna al mio SELECT
elenco.
SELECT
CatId AS PetID,
CatName AS PetName
FROM Cats
UNION ALL
SELECT
DogId AS PetID,
DogName AS PetName
FROM Dogs
ORDER BY PetId;
Risultato:
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
In realtà, nel mio caso sto selezionando colonne con nomi diversi (CatId
rispetto a DogId
, CatName
vs DogName
), quindi ho deciso di utilizzare un alias per quelle colonne (PetId
e PetName
). In questo caso, posso ORDER BY
il nome alias (PetId
).