Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql选择Top N并包含一个离散Id_Sql_Sql Server_Tsql - Fatal编程技术网

Sql选择Top N并包含一个离散Id

Sql选择Top N并包含一个离散Id,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在处理一个查询,以返回数据子集,供业务分析师审查。我收到了一个id来测试我的查询,但是有太多的用例我需要提取N条记录供他们审查。我想做的是返回一个样本大小的记录,但保证单一的孤独id包括在内 范例 我生成一个数字列表。我想参加前5名,但结果集中必须包括数字88 DECLARE @startnum INT=1, @endnum INT=100 ;WITH gen AS ( SELECT @startnum AS num UNION ALL SELECT nu

我正在处理一个查询,以返回数据子集,供业务分析师审查。我收到了一个id来测试我的查询,但是有太多的用例我需要提取N条记录供他们审查。我想做的是返回一个样本大小的记录,但保证单一的孤独id包括在内

范例 我生成一个数字列表。我想参加前5名,但结果集中必须包括数字88

DECLARE 
  @startnum INT=1,
  @endnum INT=100

;WITH gen AS (
    SELECT @startnum AS num
    UNION ALL
    SELECT num+1 FROM gen WHERE num+1<=@endnum
)
SELECT * FROM gen
option (maxrecursion 100)

num
-----------
1
2
3
4
88
这可能吗


顺便说一句,上面的内容来自。

您能这样做吗:

DECLARE 
  @startnum INT=1,
  @endnum INT=100

;WITH gen AS (
    SELECT @startnum AS num
    UNION ALL
    SELECT num+1 FROM gen WHERE num+1<=@endnum
)
SELECT TOP 4 * FROM gen WHERE num <> 88
UNION ALL
SELECT * FROM gen WHERE num = 88
option (maxrecursion 100) 

你能这样做吗:

DECLARE 
  @startnum INT=1,
  @endnum INT=100

;WITH gen AS (
    SELECT @startnum AS num
    UNION ALL
    SELECT num+1 FROM gen WHERE num+1<=@endnum
)
SELECT TOP 4 * FROM gen WHERE num <> 88
UNION ALL
SELECT * FROM gen WHERE num = 88
option (maxrecursion 100) 
您可以在不使用联合的情况下执行以下操作:

select top (5) g.*
from gen g
order by (case when num = 88 then 1 else 2 end), num;
是一个SQL FIDLE。

您可以在不使用union的情况下执行以下操作:

select top (5) g.*
from gen g
order by (case when num = 88 then 1 else 2 end), num;

是一把SQL小提琴。

@狗仔队。非常感谢。修正了。我标记了这个,因为它只有一条语句。由于只包含一个值来限制查询结果,所以我对“按顺序”和“按案例”的性能很好。@Papazzi。非常感谢。修正了。我标记了这个,因为它只有一条语句。通过限制包含单个值的查询结果,我对order By和case性能的影响很好。