分页表和获取行数

时间:2012-11-01 18:12:56

标签: sql sql-server-2008

下面的查询从第10行开始并在第20行结束的表中获取行的子集。此外,为了保存查询,我需要返回表中的总行数。这是我能想到的最佳解决方案。有更高效/优雅的方式吗?特别是,我不喜欢partition by 1部分。

select *
from (select count(*) over (partition by 1) as [count],
             row_number() over (order by [Name],[Description]) as [row],
             *
      from [Products]) as t
where row between 10 and 20

1 个答案:

答案 0 :(得分:1)

如果您不喜欢它,请将其删除!

select *
from (select count(*) over () as [count],
             row_number() over (order by [Name],[Description]) as [row],
             *
      from [Products]) as t
where row between 10 and 20

但是,除此之外,查询不是最佳的。你应该按照传统的方式进行统计。

select *
from (select count(*) as [count]
        from [Products]) X
cross join (
    select row_number() over (order by [Name],[Description]) as [row],
           *
      from [Products]) as t
where row between 10 and 20

您可以将这两者放在一起并按Ctrl-M,然后执行。计划看起来会有很大的不同。