Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ORDER BY-Elemente müssen in der Auswahlliste erscheinen, wenn die Anweisung einen UNION-, INTERSECT- oder EXCEPT-Operator enthält (SQL Server)

Wenn Sie eine Abfrage in SQL Server ausführen und die folgende Fehlermeldung erhalten…

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.

…Sie sollten Ihre SQL-Anweisung überprüfen – Sie haben wahrscheinlich eine Spalte in Ihrem SELECT ausgelassen aufführen.

Wie die Fehlermeldung andeutet, sehen Sie diesen Fehler wahrscheinlich nur, wenn Sie eine Abfrage ausführen, die einen UNION enthält , INTERSECT oder EXCEPT Betreiber.

Fügen Sie einfach die Spalte zu Ihrem SELECT hinzu Liste sollte das Problem beheben.

Beispiel

Hier ist ein Beispiel für die Erzeugung des Fehlers.

SELECT 
    CatName
FROM Cats
UNION ALL
SELECT 
    DogName 
FROM Dogs
ORDER BY CatId;

Ergebnis:

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.

Das Problem hier ist, dass ich versuche, nach der CatId zu bestellen Spalte, aber ich wähle diese Spalte nicht wirklich in meinem SELECT aus Liste.

Der einfachste Weg, dies zu beheben, besteht darin, diese Spalte zu meinem SELECT hinzuzufügen Liste.

SELECT 
    CatId AS PetID,
    CatName AS PetName
FROM Cats
UNION ALL
SELECT 
    DogId AS PetID,
    DogName AS PetName
FROM Dogs
ORDER BY PetId;

Ergebnis:

+---------+-----------+
| PetID   | PetName   |
|---------+-----------|
| 1       | Brush     |
| 1       | Yelp      |
| 2       | Scarcat   |
| 2       | Woofer    |
| 3       | Flutter   |
+---------+-----------+

Tatsächlich wähle ich in meinem Fall Spalten mit unterschiedlichen Namen aus (CatId vs DogId , CatName vs. DogName ), also habe ich mich entschieden, einen Alias ​​für diese Spalten zu verwenden (PetId und PetName ). In diesem Fall kann ich ORDER BY wählen der Aliasname (PetId ).