Tsql 查询结果中的一系列记录

Tsql 查询结果中的一系列记录,tsql,Tsql,我想知道是否有一些简单的方法、函数或其他方法可以从具有以下结果的查询返回数据 我有一个SQL Express DB 2008 R2,一个在给定列中包含数字数据的表,比如col T 我在代码中得到一个值X,并希望返回最多三条记录。colt等于我的值X的记录,以及前后的记录,除此之外没有其他内容。排序在列T上完成。前面的记录可能是文件的开头,因此不存在。同样,如果X等于最后一条记录,则后面的记录将不存在,即文件/表的结尾 表中可能不存在X值 我认为这类似于以数字顺序得到一系列结果 如果您能提供任何帮

我想知道是否有一些简单的方法、函数或其他方法可以从具有以下结果的查询返回数据

我有一个SQL Express DB 2008 R2,一个在给定列中包含数字数据的表,比如col T

我在代码中得到一个值X,并希望返回最多三条记录。colt等于我的值X的记录,以及前后的记录,除此之外没有其他内容。排序在列T上完成。前面的记录可能是文件的开头,因此不存在。同样,如果X等于最后一条记录,则后面的记录将不存在,即文件/表的结尾

表中可能不存在X值

我认为这类似于以数字顺序得到一系列结果

如果您能提供任何帮助或指导,我们将不胜感激


再次感谢,

这可能不是最理想的解决方案,但是:

SELECT T
FROM theTable
WHERE T = X
UNION ALL
SELECT *
FROM 
(
    SELECT TOP 1 T
    FROM theTable
    WHERE T > X
    ORDER BY T
) blah
UNION ALL
SELECT *
FROM
(
    SELECT TOP 1 T
    FROM theTable
    WHERE T < X
    ORDER BY T DESC
) blah2

前后是什么意思?没有指定的ORDER BY,就没有有效的订单预期。在帖子中,我指出排序在列T上。因此前后都是指与X匹配的潜在记录之前和之后的记录,虽然可能没有如所示的完全匹配。我不会将此作为答案发布,因为您指定了SQL 2008,但如果升级到SQL 2012,您可以利用滞后和超前函数从集合中的上一个或下一个记录中获取值。听起来像是SQL 2012的一个新功能。我将测试它,看看它是如何工作的。桌子会很大,所以我会关注速度。谢谢Eric,我会测试一下,看看它是如何工作的。桌子会很大,所以我会关注速度。
DECLARE @x int = 100

;WITH t as 
(
    select ROW_NUMBER() OVER (ORDER BY T ASC) AS row_nm,*
    from YourTable
)
, t1 as
(
    select *
    from t
    WHERE T = @x
)
select *
from t 
CROSS APPLY t1
WHERE t.row_nm BETWEEN t1.row_nm -1 and t1.row_nm + 1