Sql选择Top N并包含一个离散Id
我正在处理一个查询,以返回数据子集,供业务分析师审查。我收到了一个id来测试我的查询,但是有太多的用例我需要提取N条记录供他们审查。我想做的是返回一个样本大小的记录,但保证单一的孤独id包括在内 范例 我生成一个数字列表。我想参加前5名,但结果集中必须包括数字88Sql选择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
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性能的影响很好。