我的朋友在这里编写一个带有分页的数据网格的网页。我们能够将总页面数量作为窗口函数输入到列中,但是我们无法弄清楚如何将它放入参数中。看到代码会更有意义:
DECLARE @StartRow INT
DECLARE @EndRow INT
DECLARE @PerPage INT
DECLARE @PageNumber int
SET @PerPage = 30
SET @PageNumber = 1
SET @StartRow = ( ( @PageNumber - 1 ) * @PerPage ) + 1
SET @EndRow = ( ( @PageNumber ) * @PerPage ) ;
WITH cte
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY Name ) [row]
, Name
, COUNT(*) OVER ( ) AS [rowcount]
FROM table )
SELECT row, Name, ( [rowcount] / @PerPage ) + 1 AS [pages]
FROM cte
WHERE row BETWEEN @StartRow AND @EndRow
OR ( @PageNumber = -1 )
我无法从上次选择中获取参数,因为当您还返回值时无法设置参数。我希望有一些方法可以做到这一点,但与此同时(这可能是一个同样好的解决方案)我们只是在数据集中返回这个并从数据集中提取代码中的页数而不是通过输出参数。合理?如果您知道将其纳入参数的方法,请告诉我们!谢谢!
答案 0 :(得分:0)
不幸的是,所有的途径都减少了同样的事情:尝试在选择中设置一个值,同时输出数据,一个动词组合。使用输出参数进行总计数的最终解决方案是将分页数据插入表变量,这样就可以选择数据并设置输出参数。 (临时表也足够了。)
答案 1 :(得分:0)
我的回答是添加另一个cte,因为我要求将总数放在最后一行:
Declare @Page INT
SET @Page = 5
;with MainData
AS
(
select
name
from
sys.tables
)
,MainDataWithCount
AS
(
select
name
,row_number() over (ORDER BY name) AS Row
from
Maindata
)
select
MainDataWithCount.name
,MainDataWithCount.Row
,MainDataWithCount.row / @Page
from
MainDataWithCount
答案 2 :(得分:-1)
这个小改动应该这样做。
,COUNT(*)OVER(PARTITION BY NULL)AS [rowcount]