我正在尝试根据表格中的行号获取一组特定的行。为此,我试图使用以下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.
答案 0 :(得分:2)
你错过了我的朋友最后一个选择陈述中的from子句。请做这样的事情:
SELECT *
FROM cte,offsetrow
WHERE cte.RNUM > offsetrow.RNUM
答案 1 :(得分:1)
这里的问题基本上是你只从一个结果集中选择(cte
)。您的表达式代码目前产生两个:cte
和offsetrow
。
您应该将两者结合在一起(就像使用两个经典表格/视图一样)。
答案 2 :(得分:0)
我遇到了同样的问题,发现如果我想从CTE1中选择某些列,然后再加入CTE2,Hiren的解决方案将不起作用。相反,我必须执行以下操作
SELECT ....
FROM CTE1
LEFT JOIN CTE2
ON CTE1.Column= CTE2.Column
这对我有用