SQL Server: ORDER BY em subconsulta com UNION
Eu tenho duas consultas combinadas com umUNION ALL
1:
--Query 1
SELECT Flavor, Color
FROM Friends
--Query 2
SELECT Flavor,
(SELECT TOP 1 Color
FROM Rainbows
WHERE Rainbows.StrangerID = Strangers.StrangerID
ORDER BY Wavelength DESC
) AS Color
FROM Strangers
É claro que ambos funcionam bem separadamente, mas quando combinados com umUNION ALL
:
SELECT Flavor, Color
FROM Friends
UNION ALL
SELECT Flavor,
(SELECT TOP 1 Color
FROM Rainbows
WHERE Rainbows.StrangerID = Strangers.StrangerID
ORDER BY Wavelength DESC
) AS Color
FROM Strangers
A consulta falha com o erro:
Mensagem 104, nível 15, estado 1, linha 3
Os itens ORDER BY devem aparecer na lista de seleção se a instrução contiver um operador UNION.
Como uso um ORDER BY em uma declaração com um UNION ALL?
Exemplo de cópia-colávelCREATE TABLE Friends (Flavor int, Color int)
CREATE TABLE Strangers (Flavor int, StrangerID int)
CREATE TABLE Rainbows (StrangerID int, Color int, Wavelength int)
go
SELECT Flavor, Color
FROM Friends
UNION ALL
SELECT Flavor,
(SELECT TOP 1 Color
FROM Rainbows
WHERE Rainbows.StrangerID = Strangers.StrangerID
ORDER BY Wavelength DESC
) AS Color
FROM Strangers
go
DROP TABLE Rainbows
DROP TABLE Strangers
DROP TABLE Friends
Servidor: Mensagem 104, Nível 15, Estado 1, Linha 2
Os itens ORDER BY devem aparecer na lista de seleção se a instrução contiver um operador UNION.