我正在进行一项查询,以便为我们的业务分析师带回一部分数据进行审核。我收到一个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。
答案 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小提琴。