在select语句的select语句中使用

时间:2013-07-25 13:52:28

标签: sql oracle sql-server-2008-r2

我有一个请求,其中一个select语句在Oracle中有效,但是当我在SQL Server中执行它时会引发异常;请求是:

SELECT non_existant FROM 
(SELECT rownum AS non_existant ,cab, validite FROM tmp_rapprochement) 
WHERE validite like '%non_existant%'

错误是:

Msg 207, Niveau 16, État 1, Ligne 2 Nom de colonne non valide : 'rownum'.

谢谢。

1 个答案:

答案 0 :(得分:0)

错误说rownum不是有效的列名(我很高兴Google翻译有帮助)

  

消息207,级别16,状态1,行2无效的列名称'rownum'。

您需要先修复该错误 - 确保select列表中的所有列都已在表中定义。

一旦你完成了这个,你需要为内部选择提供一个别名,如下所示:

SELECT non_existant FROM
    (SELECT rownum AS non_existant ,cab, validite FROM tmp_rapprochement) x
    -- x above is an alias, it is mandatory in SQL Server syntax.
WHERE validite like '%non_existant%'

编辑您似乎正在从Oracle移植此查询,因此rownum不是真正的列。在这种情况下,您应该使用row_number函数替换它,如下所示:

SELECT non_existant FROM
    (SELECT row_number() OVER (Order by cab) AS non_existant
    ,  cab --                           ^^^ Put rapprochement's primary key there
    ,  validite FROM tmp_rapprochement
) x -- x is an alias, it is mandatory in SQL Server syntax.
WHERE validite like '%non_existant%'