Sql选择前N并包含离散ID

时间:2018-03-11 04:34:10

标签: sql sql-server tsql

我正在进行一项查询,以便为我们的业务分析师带回一部分数据进行审核。我收到一个id来测试我的查询,但有很多用例需要拉N条记录供他们查看。我想做的是返回一个样本大小的记录,但保证包含单个孤独的id。

实施例 我生成一个数字列表。我想取前五名,但数字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

这可能吗?

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

2 个答案:

答案 0 :(得分:1)

你可以这样做:

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) 

答案 1 :(得分:1)

您可以在不union all的情况下执行此操作:

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

Here是一个SQL小提琴。