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运算符.
有点黑客,但这会奏效.
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)