使用ROW_NUMBER() 排序后分页查询,当排序字段有重复记录时会导致分页查询结果出错:
SELECT * FTOM (SELECT ROW_NUMBER() OVER(ORDER BY T.KT_NUM DESC) pos,T.* FROM T_KT)) WHERE POS > 0 AND POS <= 10 --查询前10条 SELECT * FTOM (SELECT ROW_NUMBER() OVER(ORDER BY T.KT_NUM DESC) pos,T.* FROM T_KT)) WHERE POS > 10 AND POS <= 20 --查询11-20条 SELECT * FTOM (SELECT ROW_NUMBER() OVER(ORDER BY T.KT_NUM DESC) pos,T.* FROM T_KT)) --查询所有
如上例子:当KT_NUM字段有重复记录时会导致3次查询时候排序POS不统一,从而导致分页查询出结果有误
解决:使用ROW_NUMBER()排序后再分页查询时,需确保排序结果无争议性,如果排序结果有争议性,可在按需求排序后增加按唯一字段排序条件!