SQL Server: ORDER BY em subconsulta com UNION

Eu tenho duas consultas combinadas com umUNION ALL1:

--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ável
CREATE 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.

$9É claro que ambos funcionam bem separadamente, mas quando combinados com um10$Veja tambémConsulta SQL - Usando Order By no UNIONUNION SQL e ORDER BYSQL: Usando o Top 1 na consulta UNION com Order ByImpacto da ordenação de subconsultas correlacionadas dentro de uma projeção

questionAnswers(3)

yourAnswerToTheQuestion