我尝试了下面给出的sql查询:
SELECT * FROM (SELECT *
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL
SELECT * FROM TABLE_B
Run Code Online (Sandbox Code Playgroud)
它会导致以下错误:
除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.
我需要在联合中使用订单.我该如何做到这一点?
Joh*_*Woo 98
SELECT *
FROM
(
SELECT * FROM TABLE_A
UNION ALL
SELECT * FROM TABLE_B
) dum
-- ORDER BY .....
Run Code Online (Sandbox Code Playgroud)
但如果您想从Table_A结果列表的顶部获取所有记录,您可以添加可用于订购的用户定义值,
SELECT *
FROM
(
SELECT *, 1 sortby FROM TABLE_A
UNION ALL
SELECT *, 2 sortby FROM TABLE_B
) dum
ORDER BY sortby
Run Code Online (Sandbox Code Playgroud)
Gio*_*uri 34
你真的不需要括号.你可以直接排序:
SELECT *, 1 AS RN FROM TABLE_A
UNION ALL
SELECT *, 2 AS RN FROM TABLE_B
ORDER BY RN, COLUMN_1
Run Code Online (Sandbox Code Playgroud)
Fan*_*o68 16
不是OP直接反应,但我想我会在这里响应OP的ERROR消息,这可能完全指向你的另一个方向!
一旦检索到记录集并且您对该批次进行排序,所有这些答案都指的是整体 ORDER BY.
如果你想独立地对UNION的每个部分进行ORDER BY ,并且仍然将它们"加入"同一个SELECT中,该怎么办?
SELECT pass1.* FROM
(SELECT TOP 1000 tblA.ID, tblA.CustomerName
FROM TABLE_A AS tblA ORDER BY 2) AS pass1
UNION ALL
SELECT pass2.* FROM
(SELECT TOP 1000 tblB.ID, tblB.CustomerName
FROM TABLE_B AS tblB ORDER BY 2) AS pass2
Run Code Online (Sandbox Code Playgroud)
注意TOP 1000是一个任意数字.使用足够大的数字来捕获所需的所有数据.