我想从一个已排序的表中同时执行几个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
另一个限制是,我不能创建新表。因此,将排序后的表保存到新表中并从中选择也是不能的。
答案 0 :(得分:0)
使用子查询尝试此操作:
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
答案 1 :(得分:0)
尝试使用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
答案 2 :(得分:0)
您似乎想要:
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;