sql >> Database >  >> RDS >> Sqlserver

ORDER BY-items moeten in de selectielijst voorkomen als de instructie een UNION-, INTERSECT- of EXCEPT-operator (SQL-server) bevat

Als u een query uitvoert in SQL Server en u krijgt de volgende foutmelding...

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.

... je moet je SQL-statement controleren - je hebt waarschijnlijk een kolom weggelaten uit je SELECT lijst.

Zoals de foutmelding aangeeft, ziet u deze fout waarschijnlijk alleen als u een zoekopdracht uitvoert die een UNION bevat , INTERSECT of EXCEPT telefoniste.

Gewoon de kolom toevoegen aan uw SELECT lijst zou het probleem moeten oplossen.

Voorbeeld

Hier is een voorbeeld van het genereren van de fout.

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

Resultaat:

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.

Het probleem hier is dat ik probeer te bestellen met de CatId kolom, maar ik selecteer die kolom niet echt in mijn SELECT lijst.

De gemakkelijkste manier om dit op te lossen is door die kolom toe te voegen aan mijn SELECT lijst.

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

Resultaat:

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

In mijn geval selecteer ik eigenlijk kolommen met verschillende namen (CatId vs DogId , CatName vs DogName ), dus besloot ik een alias te gebruiken voor die kolommen (PetId en PetName ). In dit geval kan ik ORDER BY de aliasnaam (PetId ).


  1. Hoe te ontsnappen aan enkele aanhalingstekens in MySQL

  2. Hoe kan ik meerdere rijen combineren tot een door komma's gescheiden lijst in Oracle?

  3. Hoe String Case in PostgreSQL te converteren

  4. Hoe ORA-011033 op te lossen:ORACLE-initialisatie of afsluiten in uitvoering