首页 > 解决方案 > 当使用所有 NULL 对列进行排序时,OFFSET 不起作用

问题描述

我不明白为什么当我检索按包含所有值OFFSET的列排序的表时该子句不起作用?NULL

例如,假设我有一个People包含IDGenderRace列的表。这Race列包含所有NULL值。

当我运行这些查询时,为什么它们检索相同的数据?

SELECT * 
FROM People
ORDER BY Race ASC
    OFFSET 0 ROWS --offset 0 rows
    FETCH NEXT 15 ROWS ONLY

SELECT * 
FROM People
ORDER BY Race ASC
    OFFSET 15 ROWS --offset 15 rows
    FETCH NEXT 15 ROWS ONLY

我知道排序不起作用,因为Race列中的所有值都是NULL. 我不明白为什么它在第二个查询中没有偏移 15 行。OFFSET仅当列包含一些非 NULL 值时才能正常运行。

标签: sqlsql-server

解决方案


SELECT * 
FROM People
ORDER BY Race ASC, row_number() over(order by Race)
--    OFFSET 0 ROWS --offset 0 rows
--    FETCH NEXT 15 ROWS ONLY
    OFFSET 15 ROWS --offset 15 rows
    FETCH NEXT 15 ROWS ONLY

推荐阅读