sql-server - SQL Server : ORDER BY in subquery with UNION

标签 sql-server sql-server-2000 sql-order-by union union-all

我有两个查询与 UNION 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

当然,两者单独工作都很好,但与 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 items must appear in the select list if the statement contains a UNION operator.

如何在带有 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

Server: Msg 104, Level 15, State 1, Line 2
ORDER BY items must appear in the select list if the statement contains a UNION operator.

脚注

  • 1精心设计的假设示例。或者不是。

另请参阅

最佳答案

有点破解,但这会起作用。

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

关于sql-server - SQL Server : ORDER BY in subquery with UNION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685563/

相关文章:

sql - 从 sql server 2005 发送关于 @@error 的 dbmail

stored-procedures - 声明一个没有列定义的表变量?

mysql - 我需要 mysql 查询 wordpress 来获取有序列表

sql-server - 加入整数会比加入 nvarchar 更快吗?

sql - SQL 中的日期差异平均和分组

sql server 按数字选择列

sql-server - 数据库丢失!寻找根本原因

sql - 如何将行拆分为列

c# - 使用 Entity Framework 和 Linq 进行动态排序

php - 使用两个键对数组进行排序,如果一个键的两个值相同则使用另一个键?