Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Os itens ORDER BY devem aparecer na lista de seleção se a instrução contiver um operador UNION, INTERSECT ou EXCEPT (SQL Server)


Se você estiver executando uma consulta no SQL Server e receber o seguinte erro…
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.

…você deve verificar sua instrução SQL – você provavelmente omitiu uma coluna do seu SELECT Lista.

Como a mensagem de erro indica, você provavelmente só verá esse erro se estiver executando uma consulta que contenha um UNION , INTERSECT ou EXCEPT operador.

Basta adicionar a coluna ao seu SELECT lista deve corrigir o problema.

Exemplo


Aqui está um exemplo de geração do erro.
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.

O problema aqui é que estou tentando ordenar pelo CatId coluna, mas não estou selecionando essa coluna no meu SELECT Lista.

A maneira mais fácil de corrigir isso é adicionar essa coluna ao meu 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   |
+---------+-----------+

Na verdade, no meu caso estou selecionando colunas com nomes diferentes (CatId vs DogId , CatName vs DogName ), então decidi usar um alias para essas colunas (PetId e PetName ). Nesse caso, posso ORDER BY o nome do alias (PetId ).