Tsql 返回每个n'的行;第次记录
如何根据我提供的数字参数从子查询返回每N条记录 例如,我可能有以下查询:Tsql 返回每个n'的行;第次记录,tsql,sql-server-2008,Tsql,Sql Server 2008,如何根据我提供的数字参数从子查询返回每N条记录 例如,我可能有以下查询: SELECT Id, Key FROM DataTable WHERE CustomerId = 1234 ORDER BY Key 例如 子查询结果可能如下所示: Row Id Key 1 1 A3231 2 43 C1212 3 243 E1232 4 765 G1232 5 2432 E2325 ... 90 3193 F2312 如果我传入数字30,并且子查询
SELECT
Id,
Key
FROM DataTable
WHERE CustomerId = 1234
ORDER BY Key
例如
子查询结果可能如下所示:
Row Id Key
1 1 A3231
2 43 C1212
3 243 E1232
4 765 G1232
5 2432 E2325
...
90 3193 F2312
如果我传入数字30,并且子查询结果集包含90条记录,我将收到第30、60和90行
如果我传入数字40,结果集包含90条记录,我将收到第40行和第80行
作为旁注,对于背景信息,这用于捕获分页控件的每个第n条记录的键/id。这是可以提供帮助的地方。它需要一个ORDERBY子句,但这是可以的,因为存在ORDERBY(并且需要保证特定的订单)
您不必使用行号,任何整数字段都可以。在大多数表上,我们都有一个自动编号字段。为简单起见,我将其命名为ID。以显示每13条记录:
Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID
请注意,如果没有按排序,您将以随机顺序获得结果,因此您最好只限于前N个结果。@谢谢,忘记添加了。结果的顺序将始终相同,并且永远不会更改。@pst:
行数
窗口函数不是专有的TSQL扩展。这是SQL标准的一部分(我相信是从SQL2003开始的)。看起来如果删除一行,这可能就不起作用了?谢谢,这个简单的解决方案适合我的目的(我正在构建一个通用测试数据集,所以我不必担心任何丢失的删除项)若使用WHERE子句过滤查询,那个么ID将随机跳起,这并没有帮助。
Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID
Select B.name
from (Select row_number() over (order by ordering) as row_num,
A.name
from (Select name,'P1' as ordering
from [dbo].[every_2nd_record]
) A
) B
where B.row_num%2=0