'multi-level' CTE 中的多部分标识符无法绑定错误

Multipart identifier could not be bound error in 'multi-level' CTE

我正在尝试根据 table 中的行号获取一组特定的行。为此,我正在尝试将以下 sql 查询与通用 table 表达式 (cte) 一起使用。我在查询中标记了给我问题的部分。

我遇到的问题是不同的,因为 CTE 中的第二个查询有一个基于参数的 where 子句,所以我无法加入 table,如下所示:Sql Server CTE "multi- part identifier could not be bound."

我确定我缺少 CTE 语法的一些基础知识,因为设置本身对我来说很有意义,如果我要摆脱 CTE,我可以让它工作。有人可以告诉我我错过了什么吗?

;with cte as (
        SELECT ROW_NUMBER() OVER (ORDER BY Created) RNUM, * 
        FROM Notes 
        WHERE BookId = @BookId AND Username = @Username
    ), 
    offsetrow as (
        SELECT RNUM
        FROM cte
        WHERE cte.NoteId = @StartOffset
    )

    SELECT * 
    FROM cte
    WHERE cte.RNUM > offsetrow.RNUM --The multi-part identifier 'offset.RNUM' could not be bound.

这里的问题基本上是您仅从一个结果集中进行选择 (cte)。您的表达式代码当前生成两个:cteoffsetrow.

您应该将两者连接在一起(就像连接两个经典表/视图一样)。

你错过了在最后一个 select 语句中将 offsetrow 放入 from 子句中,我的朋友。请做这样的事情:

 SELECT * 
 FROM cte,offsetrow
 WHERE cte.RNUM > offsetrow.RNUM

我遇到了同样的问题,发现如果我想从 CTE1 select 某些列然后加入 CTE2,Hiren 的解决方案不起作用。相反,我必须执行以下操作

SELECT .... FROM CTE1 LEFT JOIN CTE2 ON CTE1.Column= CTE2.Column

这对我有用