sql >> Databasteknik >  >> RDS >> Sqlserver

ORDER BY-objekt måste visas i urvalslistan om satsen innehåller en UNION-, INTERSECT- eller EXCEPT-operator (SQL-server)

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 ).


  1. Hur simulerar man UNPIVOT i Access?

  2. MySQL Trigger efter uppdatering endast om raden har ändrats

  3. Visa Modal Window-meddelanden i Oracle Forms med Show_Alert

  4. PostgreSQL date() med tidszon