Geo*_*ton 37 t-sql 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号,子查询结果集包含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
小智 11
您不必使用行号,任何整数字段都可以.在大多数表中,我们有一个自动编号字段.为简单起见,我将其称为ID.要显示每第13条记录:
Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID