OVER Oracle中的标识符无效

时间:2016-08-22 10:55:08

标签: sql oracle

我有这个疑问:

SELECT *
FROM (SELECT ORDEN.* ,ROW_NUMBER() OVER (ORDER BY HDC_FEC) AS FILE
      FROM (SELECT HDC_OPP AS numberOperation, HDC_FEC AS SystemDate,ESD_DES AS state,HDC_MTV AS motiveCode FROM HDC
              LEFT JOIN TRM ON HDC.HDC_TRM = TRM.TRM_COD 
              ...

我在OVER子句中收到错误'无效的标识符HDC_FEC。如果我用 SystemDate替换工作正常。为什么我不能使用HDC_FEC而不是SystemDate?

谢谢。

1 个答案:

答案 0 :(得分:2)

您在子查询中为HDC_FEC列提供了别名SystemDate,因此您只能在外部查询中引用该别名:

SELECT *
FROM (SELECT ORDEN.* ,ROW_NUMBER() OVER (ORDER BY SystemDate) AS FILE

原始基础表列不可见 - 它们超出范围。您只能看到子查询中显示的内容。

如果您确实需要第二级子查询,那么您所显示的内容并不清楚。如果对子查询(where)没有where ORDEN.some_col = ...子句,则可以将row_number()移动到相同级别的查询中。您可能还需要partition by子句,但同样不清楚。 (也许您错误地创建了第二级子查询,因此您可以在真正需要group by时添加partition ...?)