【问题标题】:SQL Server CTE to select and also return valueSQL Server CTE 选择并返回值
【发布时间】: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


    【解决方案1】:
    ;WITH results 
    AS (
    
        SELECT property.* FROM property 
      )
      SELECT COUNT(*) FROM results
    

    只需使用@@ROWCOUNT 函数即可获取执行完 select 语句后返回的总行数。

    /* Your Select Statement here */
    
    SELECT @@ROWCOUNT; 
    

    【讨论】:

    • 我想选择行,并将外部计数作为总数返回。
    • @Grenville 是的,我的第二个建议就是这样做,首先执行您的选择语句,然后执行 SELECT @@ROWCOUNT。
    • 谢谢,但我已经更新了我的问题以说明为什么我认为我不能这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多