Om du kör en fråga i SQL Server och du får följande felmeddelande...
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 kontrollera din SQL-sats – du har förmodligen utelämnat en kolumn från din SELECT
lista.
Som felmeddelandet antyder kommer du förmodligen bara att se det här felet om du kör en fråga som innehåller en UNION
, INTERSECT
eller EXCEPT
operatör.
Lägg bara till kolumnen i din SELECT
listan bör lösa problemet.
Exempel
Här är ett exempel på hur felet genereras.
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 här är att jag försöker beställa med CatId
kolumnen, men jag väljer faktiskt inte den kolumnen i min SELECT
lista.
Det enklaste sättet att fixa detta är att lägga till den kolumnen i min 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;
Resultat:
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
I mitt fall väljer jag faktiskt kolumner med olika namn (CatId
kontra DogId
, CatName
kontra DogName
), så jag bestämde mig för att använda ett alias för dessa kolumner (PetId
och PetName
). I det här fallet kan jag ORDER BY
aliasnamnet (PetId
).