TOP分页哪错了呢?怎么查询结果都是一样的

禁用F3 2018-01-20 10:45:11


select top 15 * from
(
--SELECT top (15 * 1) cu.PK_ID, 一页显示15条,这样写不管是多少页数据是一样的。
--另:PK_ID与所有的外链键全是uniqueidentifier类型
SELECT top (15 * 1) cu.PK_ID,
cu.CustomerName,
pro.ProvinceName AS Province,
cu.Phone,
cu.CreateTime,
cu.UpdateTime,
cu.FK_System_UserID,
cu.Address,
cu.SiteURL,
cu.Remark,
cu.CustomerType,
cu.STATUS,
cu. ProvinceId,
cu.CityId,
dicType.Name AS CustomerTypes,
dicStatu.Name as STATUSS
FROM dbo.Customer AS cu
LEFT JOIN dbo.SystemDictionary AS dicType
ON cu.CustomerType=dicType.PK_ID
LEFT JOIN dbo.SystemDictionary AS dicStatu
ON cu.Status=dicStatu.PK_ID
LEFT JOIN dbo.Province AS pro ON cu.ProvinceId=pro.PK_ID
where 1=1 order by cu.UpdateTime desc
) AS TempTable ORDER BY TempTable.UpdateTime desc

...全文
559 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-01-28
  • 打赏
  • 举报
回复
引用 9 楼 chirea 的回复:
大版,我这是啥问题呢,能让我懂吗?你这样修改一下的意义是什么呢?
你的都用倒序是取不正确的,需要外层的排序相反 你的分页都是按顺序分页时,如:#6方法,子查询当前页的总记录都取出来,取最后一页 如果的倒序分页,在最外层要用ASC,取第一页,如需要排序时再用括嵌套多1层,指定倒序 e.g. select * from (select top 15 * from (select top (15*2) * from table1 order by col desc) as t1 order by t1 asc) as t2 order by col desc 看看你是要什么效果,你最好自己测测
禁用F3 2018-01-27
  • 打赏
  • 举报
回复
引用 8 楼 zjcxc 的回复:
where 1=1 order by cu.UpdateTime desc ) AS TempTable ORDER BY TempTable.UpdateTime desc --------------------这两个怎么都是倒排序?
因为我是想查询最近更新的数据出来。能讲解一下为什么吗?
禁用F3 2018-01-27
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
你这类写法是SQL2000时用的,效率低,如果是SQL2005用ROW_NUMBER,SQL2012用提供的offset ..rows fetch next ..rows only为例 在下面红色位置改改就行了,你的排序不对 SELECT TOP 15 * FROM ( --SELECT top (15 * 1) cu.PK_ID, 一页显示15条,这样写不管是多少页数据是一样的。 --另:PK_ID与所有的外链键全是uniqueidentifier类型 SELECT TOP (15 * 1) cu.PK_ID , cu.CustomerName , pro.ProvinceName AS Province , cu.Phone , cu.CreateTime , cu.UpdateTime , cu.FK_System_UserID , cu.Address , cu.SiteURL , cu.Remark , cu.CustomerType , cu.STATUS , cu.ProvinceId , cu.CityId , dicType.Name AS CustomerTypes , dicStatu.Name AS STATUSS FROM dbo.Customer AS cu LEFT JOIN dbo.SystemDictionary AS dicType ON cu.CustomerType=dicType.PK_ID LEFT JOIN dbo.SystemDictionary AS dicStatu ON cu.Status=dicStatu.PK_ID LEFT JOIN dbo.Province AS pro ON cu.ProvinceId=pro.PK_ID WHERE 1=1 ORDER BY cu.UpdateTime ASC) AS TempTable ORDER BY TempTable.UpdateTime DESC;
大版,我这是啥问题呢,能让我懂吗?你这样修改一下的意义是什么呢?
zjcxc 元老 2018-01-24
  • 打赏
  • 举报
回复
where 1=1 order by cu.UpdateTime desc ) AS TempTable ORDER BY TempTable.UpdateTime desc --------------------这两个怎么都是倒排序?
中国风 2018-01-23
  • 打赏
  • 举报
回复
中国风 2018-01-23
  • 打赏
  • 举报
回复
你这类写法是SQL2000时用的,效率低,如果是SQL2005用ROW_NUMBER,SQL2012用提供的offset ..rows fetch next ..rows only为例 在下面红色位置改改就行了,你的排序不对 SELECT TOP 15 * FROM ( --SELECT top (15 * 1) cu.PK_ID, 一页显示15条,这样写不管是多少页数据是一样的。 --另:PK_ID与所有的外链键全是uniqueidentifier类型 SELECT TOP (15 * 1) cu.PK_ID , cu.CustomerName , pro.ProvinceName AS Province , cu.Phone , cu.CreateTime , cu.UpdateTime , cu.FK_System_UserID , cu.Address , cu.SiteURL , cu.Remark , cu.CustomerType , cu.STATUS , cu.ProvinceId , cu.CityId , dicType.Name AS CustomerTypes , dicStatu.Name AS STATUSS FROM dbo.Customer AS cu LEFT JOIN dbo.SystemDictionary AS dicType ON cu.CustomerType=dicType.PK_ID LEFT JOIN dbo.SystemDictionary AS dicStatu ON cu.Status=dicStatu.PK_ID LEFT JOIN dbo.Province AS pro ON cu.ProvinceId=pro.PK_ID WHERE 1=1 ORDER BY cu.UpdateTime ASC) AS TempTable ORDER BY TempTable.UpdateTime DESC;
alices2 2018-01-22
  • 打赏
  • 举报
回复
Mutex.WaitOne 方法
二月十六 版主 2018-01-21
  • 打赏
  • 举报
回复
引用 2 楼 chirea 的回复:
谢谢,可更新时间要用呀。是要查以最后更新的时候排序呀。
 SELECT Identifier ,
        ROW_NUMBER() OVER ( ORDER BY UpdateTime DESC ) AS RowIndex  --这里写成时间排序
 INTO   #tb1_1
 FROM   tablename
禁用F3 2018-01-20
  • 打赏
  • 举报
回复
谢谢,可更新时间要用呀。是要查以最后更新的时候排序呀。
二月十六 版主 2018-01-20
  • 打赏
  • 举报
回复
因为order by cu.UpdateTime desc ,所以不光查多少数据,排序出来的数据都是一样的,然后取前15条,所以结果一样。 试试rownumber或者如果版本较高的话可以试试offset
 SELECT Identifier ,
        ROW_NUMBER() OVER ( ORDER BY Identifier DESC ) AS RowIndex
 INTO   #tb1_1
 FROM   tablename


 SELECT Identifier
 INTO   #tb1_2
 FROM   #tb1_1 AS t
 WHERE  t.RowIndex > ( @CurrentPage - 1 ) * @PageSize
        AND t.RowIndex <= @CurrentPage * @PageSize

 SELECT *
 FROM   tablename
 WHERE  a.Identifier IN ( SELECT    *
                          FROM      #tb1_2 )
 ORDER BY Identifier DESC

 DROP TABLE #tb1_1 
 DROP TABLE #tb1_2

34,575

社区成员

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

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