У меня есть два запроса в сочетании с 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
Запрос не выполнен с ошибкой:
Сообщение 104, Уровень 15, Состояние 1, Строка 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.
Сноска
- 1 Придуманный гипотетический пример. Или нет.
Смотри также