SQL Server: ORDER BY в подзапросе с UNION

у меня есть два запроса, объединенные с UNION 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

Оба из которых, конечно, нормально работать отдельно, но в сочетании с UNION 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

Запрос не выполняется с ошибкой:

Msg 104, Level 15, State 1, Line 3
Элементы ORDER BY должны появиться в списке выбора, если оператор содержит оператор UNION.

Как использовать ORDER BY в операторе с UNION ALL?

Пример копирования-вставки

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

Сервер: Msg 104, Уровень 15, состояние 1, строка 2
Элементы ORDER BY должны появиться в списке выбора, если оператор содержит оператор UNION.

Footnotes

  • 1 Надуманный гипотетический пример. Или нет.

См. Также

11
задан Community 23 May 2017 в 12:31
поделиться