SQL Server:带有UNION的子查询中的ORDER BY

Ian*_*oyd 11 sql-server union sql-server-2000 sql-order-by union-all

我有两个查询与UNION ALL1组合:

--Query 1
SELECT Flavor, Color
FROM Friends
Run Code Online (Sandbox Code Playgroud)

 

--Query 2
SELECT Flavor,
    (SELECT TOP 1 Color
     FROM Rainbows
     WHERE Rainbows.StrangerID = Strangers.StrangerID
     ORDER BY Wavelength DESC
    ) AS Color
FROM Strangers
Run Code Online (Sandbox Code Playgroud)

当然,这两者都可以单独工作,但当与以下内容结合使用时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
Run Code Online (Sandbox Code Playgroud)

查询失败并显示错误:


如果语句包含UNION运算符,则消息104,级别15,状态1,行3 ORDER BY项必须出现在选择列表中.

如何在UNION ALL的语句中使用ORDER BY?

复制 - 可粘贴示例

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
Run Code Online (Sandbox Code Playgroud)

服务器:消息104,级别15,状态1,行2
ORDER BY项目必须出现在选择列表中,如果该语句包含UNION运算符.

脚注

  • 1受挫的假设例子.或不.

也可以看看

Joe*_*lli 6

有点黑客,但这会奏效.

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 Color FROM 
        (SELECT TOP 1 Color, Wavelength
         FROM Rainbows
         WHERE Rainbows.StrangerID = Strangers.StrangerID
         ORDER BY Wavelength DESC
         ) AS Foo
    ) AS Color
FROM Strangers
go

DROP TABLE Rainbows
DROP TABLE Strangers
DROP TABLE Friends
Run Code Online (Sandbox Code Playgroud)