【发布时间】:2014-02-09 14:59:59
【问题描述】:
在 SQL Server 2008 中,我使用公用表表达式来选择与给定条件匹配的属性(别墅)列表,然后给出行号并根据行号选择特定的“页面”。它运行良好,但我也想返回总行数(即忽略后续分页)。 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 更永久吗?
【问题讨论】:
标签: sql sql-server common-table-expression