Ако изпълнявате заявка в SQL Server и получавате следната грешка...
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.
…трябва да проверите своя SQL израз – вероятно сте пропуснали колона от вашия SELECT
списък.
Както подсказва съобщението за грешка, вероятно ще видите тази грешка само ако изпълнявате заявка, която съдържа UNION
, INTERSECT
или EXCEPT
оператор.
Просто добавяне на колоната към вашия SELECT
списъкът трябва да реши проблема.
Пример
Ето пример за генериране на грешката.
SELECT
CatName
FROM Cats
UNION ALL
SELECT
DogName
FROM Dogs
ORDER BY CatId;
Резултат:
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.
Проблемът тук е, че се опитвам да поръчам по CatId
колона, но всъщност не избирам тази колона в моя SELECT
списък.
Най-лесният начин да поправите това е да добавите тази колона към моя SELECT
списък.
SELECT
CatId AS PetID,
CatName AS PetName
FROM Cats
UNION ALL
SELECT
DogId AS PetID,
DogName AS PetName
FROM Dogs
ORDER BY PetId;
Резултат:
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
Всъщност в моя случай избирам колони с различни имена (CatId
срещу DogId
, CatName
срещу DogName
), затова реших да използвам псевдоним за тези колони (PetId
и PetName
). В този случай мога да ORDER BY
псевдонимът (PetId
).