sql >> Base de Datos >  >> RDS >> Sqlserver

Los elementos ORDER BY deben aparecer en la lista de selección si la declaración contiene un operador UNION, INTERSECT o EXCEPT (SQL Server)

Si está ejecutando una consulta en SQL Server y recibe el siguiente error...

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.

…deberías revisar tu declaración SQL – probablemente hayas omitido una columna de tu SELECT lista.

Como implica el mensaje de error, probablemente solo verá este error si está ejecutando una consulta que contiene un UNION , INTERSECT o EXCEPT operador.

Simplemente agregue la columna a su SELECT list debería solucionar el problema.

Ejemplo

Aquí hay un ejemplo de cómo generar el error.

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

Resultado:

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.

El problema aquí es que estoy tratando de ordenar por el CatId columna, pero en realidad no estoy seleccionando esa columna en mi SELECT lista.

La forma más fácil de solucionar esto es agregar esa columna a mi 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;

Resultado:

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

En realidad, en mi caso estoy seleccionando columnas con diferentes nombres (CatId vs DogId , CatName vs DogName ), así que decidí usar un alias para esas columnas (PetId y PetName ). En este caso, puedo ORDER BY el nombre de alias (PetId ).