请问sqlserver05用row_number进行分页,如何获取记录总数?

li2422121715 2013-03-27 04:59:54

With TTTTT AS
(
select productid,productname,price,pictureshow,updatetime from product A
left join (select kindid,brandid from Kind) B on A.kindid=B.kindid
where B.brandid=@brandid
)
select * from
(
select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,* from TTTTT
) as T
where rownumber between 1 and 10

这是我的sql语句,我想获得TTTTT记录的总数,求教
...全文
302 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
水族杰纶 2013-03-27
  • 打赏
  • 举报
回复
--try
With TTTTT AS
(
    select productid,productname,price,pictureshow,updatetime ,
    count(*)over()总行数
    
from product A 
    left join (select kindid,brandid from Kind) B on A.kindid=B.kindid
    where B.brandid=@brandid
)
select * from
(
    select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,* from TTTTT
) as T
where rownumber between 1 and 10
li2422121715 2013-03-27
  • 打赏
  • 举报
回复
引用 5 楼 maco_wang 的回复:
嵌套子查询即可。

With TTTTT AS
(
    select productid,productname,price,pictureshow,updatetime from product A 
    left join (select kindid,brandid from Kind) B on A.kindid=B.kindid
    where B.brandid=@brandid
)
select * from
(
    select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,*,(select count(*) from TTTTT) as cnt from TTTTT
) as T
where rownumber between 1 and 10
这样子执行,(select count(*)不会被执行多次吗,求指教
li2422121715 2013-03-27
  • 打赏
  • 举报
回复
引用 5 楼 maco_wang 的回复:
嵌套子查询即可。

With TTTTT AS
(
    select productid,productname,price,pictureshow,updatetime from product A 
    left join (select kindid,brandid from Kind) B on A.kindid=B.kindid
    where B.brandid=@brandid
)
select * from
(
    select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,*,(select count(*) from TTTTT) as cnt from TTTTT
) as T
where rownumber between 1 and 10
这样select count(*)执行多少次?我在想会不会执行了N次
叶子 2013-03-27
  • 打赏
  • 举报
回复
嵌套子查询即可。

With TTTTT AS
(
    select productid,productname,price,pictureshow,updatetime from product A 
    left join (select kindid,brandid from Kind) B on A.kindid=B.kindid
    where B.brandid=@brandid
)
select * from
(
    select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,*,(select count(*) from TTTTT) as cnt from TTTTT
) as T
where rownumber between 1 and 10
li2422121715 2013-03-27
  • 打赏
  • 举报
回复
引用 2 楼 davinciyxw 的回复:
With TTTTT AS ( select productid,productname,price,pictureshow,updatetime from product A left join (select kindid,brandid from Kind) B on A.kindid=B.kindid where B.brandid=@brandid ) select * from ( select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,*,count(*) from TTTTT ) as T where rownumber between 1 and 10
这样岂不是查询了N次count(*),而且每条记录里面都有记录总数。我只需要另外一个单独的count(*)
li2422121715 2013-03-27
  • 打赏
  • 举报
回复
引用 1 楼 chuanzhang5687 的回复:
自己另外在查询一次,然后关联到表里面
能不能利用已经排好序的rownumber?可以少一次连接查询
  • 打赏
  • 举报
回复
With TTTTT AS ( select productid,productname,price,pictureshow,updatetime from product A left join (select kindid,brandid from Kind) B on A.kindid=B.kindid where B.brandid=@brandid ) select * from ( select ROW_NUMBER() OVER (ORDER BY updatetime desc) as rownumber,*,count(*) from TTTTT ) as T where rownumber between 1 and 10
chuanzhang5687 2013-03-27
  • 打赏
  • 举报
回复
自己另外在查询一次,然后关联到表里面

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧