Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何显示包含特定记录的结果页_Sql_Tsql - Fatal编程技术网

SQL如何显示包含特定记录的结果页

SQL如何显示包含特定记录的结果页,sql,tsql,Sql,Tsql,我有一个SQL数据库,我使用分页和排序来显示它 e、 g 如果添加了一个新人,我想显示包含该新人的结果页面。他们可能在那页的一半,所以我不想只找到他们和接下来的11张唱片。关于如何优雅地做到这一点,有什么想法吗?如果我正确理解了这个问题,我的想法是,您需要包含一个计算列,以包含页码,该页码基于一个基于order by的NTILE分组。类似这样的东西,使用带有。有关NTILE的详细信息,请参阅链接 DECLARE @RowsPerPage INT = 12; DECLARE @PageCount

我有一个SQL数据库,我使用分页和排序来显示它

e、 g


如果添加了一个新人,我想显示包含该新人的结果页面。他们可能在那页的一半,所以我不想只找到他们和接下来的11张唱片。关于如何优雅地做到这一点,有什么想法吗?

如果我正确理解了这个问题,我的想法是,您需要包含一个计算列,以包含页码,该页码基于一个基于order by的NTILE分组。类似这样的东西,使用带有。有关NTILE的详细信息,请参阅链接

DECLARE @RowsPerPage INT = 12;
DECLARE @PageCount INT;

SELECT  @PageCount = COUNT(*) / @RowsPerPage
FROM    People_Table
WHERE   Country = @Country;

SELECT  * ,
        NTILE(@PageCount) OVER ( ORDER BY PostCode ) AS PageNum
FROM    People_Table
WHERE   Country = @Country
ORDER BY Postcode
        OFFSET @Offset ROWS FETCH NEXT @RowsPerPage ROWS ONLY;
代码示例仅供参考,我并没有测试它,只是确保它能够解析


评论:您可能需要更具体地说明您的订单,但是,按邮政编码排序并不保证共享相同邮政编码的行的顺序。当一个邮政编码开始跨越多个页面时,这将是一个问题。所以你想按邮政编码、人名或其他更具体的方式订购。

谢谢,我来试试。(邮政编码是我试图给出一个比我实际拥有的表格更容易理解的表格)

我要做的是:

SELECT RowNo 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY DriverID) AS RowNo,Id
FROM DriverID_Table 
WHERE Fleet IN (SELECT Fleet_ID FROM Fleet_Table WHERE User_Id=@user)) AS t
WHERE Id=@ID
使用从中返回的值计算页码,然后使用第二个查询获取该页

page = (int)RowNo/12; Offset = page*12;

SELECT * 
FROM DriverID_Table
WHERE Fleet IN (SELECT Fleet_ID FROM Fleet_Table WHERE User_Id=@user)
ORDER BY DriverId 
OFFSET @Offset ROWS FETCH NEXT 12 ROWS ONLY

Microsoft Azure SQL数据库不会是一个简单的按顺序排列的前1名。如果不是,您能否解释一下示例数据和预期结果
page = (int)RowNo/12; Offset = page*12;

SELECT * 
FROM DriverID_Table
WHERE Fleet IN (SELECT Fleet_ID FROM Fleet_Table WHERE User_Id=@user)
ORDER BY DriverId 
OFFSET @Offset ROWS FETCH NEXT 12 ROWS ONLY