首页 > 解决方案 > Union 从排序表中选择

问题描述

我想同时从一个排序表中执行几个 SELECT。我的想法如下:

SELECT TOP 5 * FROM unsorted_table where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
UNION
SELECT TOP 5 * FROM unsorted_table where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC

但由于 ORDER BY,它显然不起作用。我也试过这个,但没有成功:

SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)
UNION
SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)

如果我使用以下内容,正如在其他线程上推荐的那样,我没有得到我需要的东西,因为表格最后排序:

SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC

另一个限制是,我不能创建新表。因此,将排序后的表保存在新表中并从中进行选择也不是一个选项。

标签: sqlsql-serversql-order-byunion

解决方案


尝试使用子查询:

select * from 
(SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2)a
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC

推荐阅读