Geo*_*ton 37 t-sql sql-server-2008
如何根据我提供的数字参数从子查询返回每个第n条记录?
例如,我可能有以下查询:
SELECT
Id,
Key
FROM DataTable
WHERE CustomerId = 1234
ORDER BY Key
Run Code Online (Sandbox Code Playgroud)
例如
子查询结果可能如下所示:
Row Id Key
1 1 A3231
2 43 C1212
3 243 E1232
4 765 G1232
5 2432 E2325
...
90 3193 F2312
Run Code Online (Sandbox Code Playgroud)
如果我通过在30号,子查询结果集包含90条记录,我就收到了第30,第60和第90行.
如果我传入数字40,结果集包含90条记录,我会收到第40和第80行.
作为旁注,对于背景信息,这用于捕获寻呼控制的每个第n条记录的密钥/ id.
Luk*_*keH 61
这是ROW_NUMBER可以帮助的地方.它需要一个order-by子句,但这是可以的,因为存在order-by(并且需要保证特定的顺序).
SELECT t.id, t.key
FROM
(
SELECT id, key, ROW_NUMBER() OVER (ORDER BY key) AS rownum
FROM datatable
) AS t
WHERE t.rownum % 30 = 0 -- or % 40 etc
ORDER BY t.key
Run Code Online (Sandbox Code Playgroud)
小智 11
您不必使用行号,任何整数字段都可以.在大多数表中,我们有一个自动编号字段.为简单起见,我将其称为ID.要显示每第13条记录:
Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40369 次 |
| 最近记录: |