2
使用SQL Server 2008时,我使用公用表表达式来选择与给定条件匹配的属性(别墅)列表,然后给出行号并选择特定“页面”行号。它运行良好,但我也想返回总行数(即忽略后续分页)。 CTE似乎只有在声明后才有一次使用。我曾尝试做以下(超级简化版);SQL Server CTE选择并返回值
WITH results AS (
SELECT property.* FROM property
)
SELECT * FROM results
RETURN SELECT COUNT(results.id)
但它失去了对'结果'和错误的引用;
无法绑定多部分标识符“results.id”。
有没有一种有效的方式来做到这一点,不涉及双重查询?
为了澄清,我想同时选择行,并且还返回外部行的总数。但主要是我在第一次使用后似乎不存在CTE的路障。
为了帮助展示M.Ali在全面解决方案中的目标;
DECLARE @pageSize int;
DECLARE @pageNumber int;
DECLARE @totalResults int;
SET @pageSize = 30;
SET @pageNumber = 1;
;WITH results AS (
SELECT property.*
FROM property
),
/* add the row number based on sorting */
/* this is where I need to store into @totalResults, but I can't break the CTE chain */
weightedResults AS (
SELECT
*,
ROW_NUMBER() OVER(ORDER BY results.id) AS rowNum
FROM
results
)
/* do the paged select */
SELECT * FROM weightedResults
WHERE (rowNum > @pageSize * (@pageNumber-1)) AND (rowNum <= (@pageSize * (@pageNumber-1)) + @pageSize)
ORDER BY rowNum
看到我的状态,我需要收集总行的评论 - 这是我需要总行从“结果”存储点,但如果我在这一点上选择然后我消耗的CTE 。我可以让CTE更持久吗?
我想选择行,并返回外部计数作为总数。 – Grenville
@Grenville是的,我的第二个建议是这样做的,先执行你的select语句然后SELECT @@ ROWCOUNT。 –
谢谢,但我已更新我的问题,以说明为什么我认为我无法做到这一点。 – Grenville