Jeśli uruchamiasz zapytanie w SQL Server i pojawia się następujący błąd…
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.
…powinieneś sprawdzić swoją instrukcję SQL – prawdopodobnie pominąłeś kolumnę w swoim SELECT
lista.
Jak sugeruje komunikat o błędzie, prawdopodobnie zobaczysz ten błąd tylko wtedy, gdy uruchomisz zapytanie zawierające UNION
, INTERSECT
lub EXCEPT
operatora.
Po prostu dodaj kolumnę do SELECT
lista powinna rozwiązać problem.
Przykład
Oto przykład generowania błędu.
SELECT
CatName
FROM Cats
UNION ALL
SELECT
DogName
FROM Dogs
ORDER BY CatId;
Wynik:
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.
Problem polega na tym, że próbuję zamówić według CatId
kolumna, ale w rzeczywistości nie wybieram tej kolumny w moim SELECT
lista.
Najłatwiejszym sposobem naprawienia tego jest dodanie tej kolumny do mojego SELECT
lista.
SELECT
CatId AS PetID,
CatName AS PetName
FROM Cats
UNION ALL
SELECT
DogId AS PetID,
DogName AS PetName
FROM Dogs
ORDER BY PetId;
Wynik:
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
Właściwie w moim przypadku wybieram kolumny o różnych nazwach (CatId
vs DogId
, CatName
vs DogName
), więc zdecydowałem się użyć aliasu dla tych kolumn (PetId
i PetName
). W takim przypadku mogę ORDER BY
nazwa aliasu (PetId
).