在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)

原文: 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。



1、在inner join后,如何分页。


http://bbs.csdn.net/topics/390617884

sqlserver 对一张表进行分页查询,但是还要通过第二张表获取信息:



   
   
  1. --比如有一张表
  2. create table Student
  3. (
  4. sid int primary key identity( 1, 1) ,
  5. sname varchar( 15) not null
  6. )
  7. --第二张表
  8. create table Comment
  9. (
  10. id int primary key identity( 1, 1) ,
  11. sid int not null
  12. )


我需要对第二张表comment 进行分页查询,但是还要通过第一张表查询姓名
要改如何写sql代码。
我用内连接后接下来该如何做。


我的解法:


   
   
  1. declare @page_size int;
  2. declare @page_num int;
  3. --比如:每页10条记录
  4. set @page_size = 10;
  5. --比如:先取第1页
  6. set @page_num = 1;
  7. select id, sid,sname
  8. from
  9. (
  10. select c.id,
  11. c.sid,
  12. s.sname,
  13. --这里按照@@servername来排序,
  14. --你可以根据需要按照id,sid,sname等字段来排序
  15. (row_number() over( order by @@servername) - 1) / @page_size as rownum
  16. from commet c
  17. inner join student s
  18. on c.sid = s.sid
  19. )t
  20. where rownum = @page_num - 1
由于没有实验数据,下面通过sys.objects来实现:

   
   
  1. declare @page_size int;
  2. declare @page_num int;
  3. --比如:每页10条记录
  4. set @page_size = 10;
  5. --比如:先取第1页
  6. set @page_num = 1;
  7. select *
  8. from
  9. (
  10. select *,
  11. row_number() over( order by @@servername) as rownum,
  12. --这里按照@@servername来排序,
  13. --你可以根据需要按照id,sid,sname等字段来排序
  14. (row_number() over( order by @@servername) - 1) / @page_size as pagenum
  15. from sys.objects
  16. )t
  17. where pagenum = @page_num - 1


    
    
  1. --适用于sql server 2012
  2. --也就是 从哪个offset开始,取后面的多少行
  3. select *
  4. from sys.objects
  5. order by @@servername
  6. offset (@page_num - 1)*@page_size rows
  7. fetch next @page_size rows only


2、group by trueName后,返回不尽相同的userName,也就是userName字段的值需要一定的随机性,然后求score的总和。

猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/12019980.html
今日推荐