联合 Select 来自排序 table

Union Select from sorted table

我想同时从已排序的 table 中执行多个 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)

如果我使用以下内容,因为它在此处的其他线程上被推荐,我没有得到我需要的东西,因为 table 排在最后:

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

另一个限制是,我可能无法创建新的 table。因此,将排序后的 table 保存在新的 table 中并从那里进行选择也没有任何选择。

使用子查询试试这个:

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

尝试使用 WITH:

WITH xy AS (
SELECT TOP 5 * 
  FROM unsorted_table 
 WHERE parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
),
yz AS (
SELECT TOP 5 * 
  FROM unsorted_table 
 WHERE parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
)
SELECT * FROM xy
UNION
SELECT * FROM yz

你似乎想要 :

select u.*
from (select *, row_number() over (partition by parameter1 order by parameter2 desc, paramter3 desc, parameter4) seq
      from unsorted_table 
      where parameter1 in (1,2)
     ) u
where seq <= 5;