SQL:返回分页记录,并获取所有记录的计数



这是我查询的简化版本:

select myCol1, mycol2 from MyTable where mycol3 = 'blah'
OFFSET (@skip) rows fetch next (@take) rows only

这按预期工作,但是我正在尝试修改它,以便我也获得返回给我的所有找到的记录的全部计数。这是我目前的尝试,但是DataCount总是返回不正确的 1。我哪里出错了?

select t.myCol1, t.mycol2, count(t.id) as DataCount from MyTable t where mycol3 = 'blah'
group by myCol1, myCol2
OFFSET (@skip) rows fetch next (@take) rows only

您可以使用窗口函数:

select myCol1, mycol2, count(*) over() dataCount
from MyTable 
where mycol3 = 'blah'
order by ??
offset (@skip) rows fetch next (@take) rows only

请注意,您的查询似乎缺少一个order by子句 - 没有它,则无法定义记录在结果集中的排序方式,这可能会使结果在多次执行同一查询时不一致(当您分页时可能会发生这种情况(。

最新更新