奇怪,这样写分页取出的数据居然是重复的。

soamu 2018-12-31 01:36:25
select top 10 * from [Tb] where (ID not in (select top 20 ID from [Tb] where ACode='b35e988c8b0738d5' order by CsSort)) and ACode='b35e988c8b0738d5' order by CsSort

select top 10 * from [Tb] where (ID not in (select top 30 ID from [Tb] where ACode='b35e988c8b0738d5' order by CsSort)) and ACode='b35e988c8b0738d5' order by CsSort


我用这样的语句排序并分页,结果有很多重复的。。如果按照ID排序就不重复。。如果按照指定字段排序就重复。
...全文
310 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chiang28 2019-07-10
  • 打赏
  • 举报
回复
因为你的id是不会重复的,而你的CsSort这个字段的值有重复,你可以再加个字段排序
  • 打赏
  • 举报
回复
得有个 唯一结果的排序方案
Dear SQL(燊) 2019-01-02
  • 打赏
  • 举报
回复
分页排序字段需唯一,如果排序字段不唯一在有的情况下(并行度,不同的join)很有可能是重复的,
xiaoxiangqing 2019-01-02
  • 打赏
  • 举报
回复
是不是数据本来就有重复的?
qq_33063203 2019-01-02
  • 打赏
  • 举报
回复
按照ID排序不重复,因为你的ID是主键。你查下CsSort是不是有相同的值,根本排不了序
吉普赛的歌 2019-01-01
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
	DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
id INT IDENTITY(1,1) PRIMARY KEY	
,[Name] NVARCHAR(10)
,[Sex] NVARCHAR(2)
,[CsSort] VARCHAR(6)
,[Times] INT	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'张三',N'男',N'2',N'2018')
INSERT INTO dbo.[t] VALUES(N'李四',N'男',N'2',N'2018')
INSERT INTO dbo.[t] VALUES(N'王五',N'男',N'1',N'2018')
INSERT INTO dbo.[t] VALUES(N'沈六',N'女',N'9',N'2018')
INSERT INTO dbo.[t] VALUES(N'宋奇',N'男',N'6',N'2017')
INSERT INTO dbo.[t] VALUES(N'诸葛',N'女',N'2',N'2015')

DECLARE @pageIndex INT,@pageSize INT
SET @pageIndex=1
SET @pageSize=2

--排序字段必须唯一, 否则会导致每页记录不稳定
--无法唯一的,可以加主键或其它字段保持唯一
--SQL Server2012+
SELECT id,[Name],Sex,CsSort,Times FROM t
ORDER BY t.CsSort,id 
OFFSET (@pageIndex-1)*@pageSize ROWS
FETCH NEXT @pageSize ROWS ONLY;
/*
id          Name       Sex  CsSort Times
----------- ---------- ---- ------ -----------
3           王五         男    1      2018
1           张三         男    2      2018
*/

--SQL Server2005+
SELECT * FROM (
	SELECT ROW_NUMBER() OVER ( ORDER BY CsSort,id) AS rid,id,[Name],Sex,CsSort,Times 
	FROM t
)AS tt
WHERE rid BETWEEN (@pageIndex-1)*@pageSize AND @pageIndex* @pageSize
ORDER BY rid
/*
rid                  id          Name       Sex  CsSort Times
-------------------- ----------- ---------- ---- ------ -----------
1                    3           王五         男    1      2018
2                    1           张三         男    2      2018
*/
soamu 2018-12-31
  • 打赏
  • 举报
回复
Name Sex CsSort Times ------------------------------------------- 张三 男 2 2018 ------------------------------------------- 李四 男 2 2018 ------------------------------------------- 王五 男 1 2018 ------------------------------------------- 沈六 女 9 2018 ------------------------------------------- 宋奇 男 6 2017 ------------------------------------------- 诸葛 女 2 2015
soamu 2018-12-31
  • 打赏
  • 举报
回复
CsSort字段是多个一样的数字,比如:1.1.1/2.2/6.6.6.6/5/
二月十六 2018-12-31
  • 打赏
  • 举报
回复
08以前的数据库建议用rownumber实现分页,12以后用offset的写法。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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