SQL select 仅单行数x
SQL select single row number x only
为了处理 VBA 中的 SQL 数据,我想使用一个循环 (For...Next) 从 SQL 数据库逐行读取。由于记录被删除,ID 列有空白。 table 看起来像这样的例子:
ID Value
1 Peter
3 Paul
4 Mary
9 George
有四行我想运行
For i = 1 to 4
SELECT ???
Next i
当然,“每个人”也有好处。
如果你想逐行阅读,你可以遍历结果集。但是如果你真的需要枚举值,你可以使用 row_number()
:
select row_number() over (order by id) as seqnum, t.*
from t;
seqnum
然后保证是一个从 1 开始没有间隙的递增值。
编辑:
如果您想 select 特定行,您 可以 将 row_number()
与子查询或 CTE 一起使用:
select t.*
from (select row_number() over (order by id) as seqnum, t.*
from t
) t
where seqnum = 10;
但推荐的方法是 offset
/fetch
:
select t.*
from t
order by id
offset 9 row fetch first 1 row only;
如果您想要 4 行,则使用 order by
和 top
- 或者 fetch clause
:
select top(4) t.*
from mytable t
order by id
或者:
select t.*
from mytable t
order by id
offset 0 rows fetch first 4 rows only
然后您可以在应用程序中循环访问结果集。
另一方面,如果您只需要第 4 行,则只需更改 fetch
子句:
select t.*
from mytable t
order by id
offset 3 rows fetch next 1 row only
为了处理 VBA 中的 SQL 数据,我想使用一个循环 (For...Next) 从 SQL 数据库逐行读取。由于记录被删除,ID 列有空白。 table 看起来像这样的例子:
ID Value
1 Peter
3 Paul
4 Mary
9 George
有四行我想运行
For i = 1 to 4
SELECT ???
Next i
当然,“每个人”也有好处。
如果你想逐行阅读,你可以遍历结果集。但是如果你真的需要枚举值,你可以使用 row_number()
:
select row_number() over (order by id) as seqnum, t.*
from t;
seqnum
然后保证是一个从 1 开始没有间隙的递增值。
编辑:
如果您想 select 特定行,您 可以 将 row_number()
与子查询或 CTE 一起使用:
select t.*
from (select row_number() over (order by id) as seqnum, t.*
from t
) t
where seqnum = 10;
但推荐的方法是 offset
/fetch
:
select t.*
from t
order by id
offset 9 row fetch first 1 row only;
如果您想要 4 行,则使用 order by
和 top
- 或者 fetch clause
:
select top(4) t.*
from mytable t
order by id
或者:
select t.*
from mytable t
order by id
offset 0 rows fetch first 4 rows only
然后您可以在应用程序中循环访问结果集。
另一方面,如果您只需要第 4 行,则只需更改 fetch
子句:
select t.*
from mytable t
order by id
offset 3 rows fetch next 1 row only