多部分标识符无法在“多级”CTE中绑定错误

时间:2015-01-29 19:36:22

标签: sql-server sql-server-2008 common-table-expression

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

我遇到的问题不同,因为CTE中的第二个查询有一个基于参数的where子句,所以我不能加入表格,如下所示: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.

3 个答案:

答案 0 :(得分:2)

你错过了我的朋友最后一个选择陈述中的from子句。请做这样的事情:

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

答案 1 :(得分:1)

这里的问题基本上是你只从一个结果集中选择(cte)。您的表达式代码目前产生两个:cteoffsetrow

您应该将两者结合在一起(就像使用两个经典表格/视图一样)。

答案 2 :(得分:0)

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

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

这对我有用