SQL Server: ORDER BY in Unterabfrage mit UNION

Ich habe zwei Abfragen, die mit einem @ kombiniert werdUNION 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

Beide davon funktionieren natürlich auch einzeln, aber in Kombination mit einemUNION 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

Die Abfrage schlägt mit dem Fehler fehl:

Meldung 104, Ebene 15, Status 1, Zeile 3
ORDER BY-Elemente müssen in der Auswahlliste angezeigt werden, wenn die Anweisung einen UNION-Operator enthält.

Wie verwende ich ein ORDER BY in einer Anweisung mit UNION ALL?

Copy-Pasteable Example
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

Server: Nachricht 104, Ebene 15, Status 1, Zeile 2
ORDER BY-Elemente müssen in der Auswahlliste angezeigt werden, wenn die Anweisung einen UNION-Operator enthält.

Fußnoten1Contrived hypothetisches Beispiel. Oder nichtSiehe aucSQL Query - Verwenden von Order By in UNIONSQL UNION und ORDER BYSQL: Verwenden von Top 1 in UNION-Abfragen mit Order Byuswirkungen der Anordnung korrelierter Unterabfragen innerhalb einer Projekti

Antworten auf die Frage(6)

Ihre Antwort auf die Frage