Ahm*_*aja 3 sql sql-server pagination sql-server-2012
我有这个表定义
CREATE TABLE [dbo].[Earnings](
[Name] [nvarchar](50) NOT NULL,
[Date] [datetime] NOT NULL,
[Earnings] [decimal](18, 2) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
我有这个样本数据
INSERT INTO [dbo].[Earnings] ([name], [Date], [Earnings])
VALUES
('person1', datefromparts(2015, 9, 1), 9.01),
('person1', datefromparts(2015, 10, 5), 10.05),
('person1', datefromparts(2015, 11, 21), 11.21),
('person1', datefromparts(2016, 1, 11), 1.12),
('person1', datefromparts(2016, 3, 13), 3.13),
('person1', datefromparts(2016, 5, 15), 5.15),
('person2', datefromparts(2016, 6, 16), 6.16),
('person2', datefromparts(2016, 8, 18), 8.18)
Run Code Online (Sandbox Code Playgroud)
当我做分页时,我总是得到以下两个sql语句相同的结果,我想知道这个问题的原因是什么?以及有哪些可能的解决方法?
SELECT * FROM [dbo].Earnings order by Name OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY ;
SELECT * FROM [dbo].Earnings order by Name OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY ;
Run Code Online (Sandbox Code Playgroud)
我得到的结果都是执行
Name Date Earnings
person1 2015-11-21 00:00:00.000 11.21
person1 2015-10-05 00:00:00.000 10.05
Run Code Online (Sandbox Code Playgroud)
order by应该是确定性的.这意味着如果任何列包含相同的值并且在order by子句中使用,sql将选择/可以选择任何row.so以按确定性顺序排序,按列排序应该是唯一的.
在你的情况下,使用
SELECT * FROM [dbo].Earnings order by Name,date OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY ;
SELECT * FROM [dbo].Earnings order by Name,date OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |