Hvis du kører en forespørgsel i SQL Server, og du får følgende fejlmeddelelse...
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.
…du bør tjekke din SQL-sætning – du har sandsynligvis udeladt en kolonne fra din SELECT
liste.
Som fejlmeddelelsen antyder, vil du sandsynligvis kun se denne fejl, hvis du kører en forespørgsel, der indeholder en UNION
, INTERSECT
eller EXCEPT
operatør.
Du skal blot tilføje kolonnen til din SELECT
listen burde løse problemet.
Eksempel
Her er et eksempel på generering af fejlen.
SELECT
CatName
FROM Cats
UNION ALL
SELECT
DogName
FROM Dogs
ORDER BY CatId;
Resultat:
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.
Problemet her er, at jeg prøver at bestille efter CatId
kolonne, men jeg vælger faktisk ikke den kolonne i min SELECT
liste.
Den nemmeste måde at løse dette på er at tilføje den kolonne til min 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;
Resultat:
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
Faktisk vælger jeg i mit tilfælde kolonner med forskellige navne (CatId
vs DogId
, CatName
vs DogName
), så jeg besluttede at bruge et alias for disse kolonner (PetId
og PetName
). I dette tilfælde kan jeg ORDER BY
aliasnavnet (PetId
).