2016-08-22 71 views
0

我有此查询:无效标识符在对甲骨文

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?

谢谢。

回答

2

你给了HDC_FEC列别名SystemDate在子查询,所以你只能参考该别名在外部查询:

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

原来的基础表中的列是不可见的 - 他们是出来的范围。你只能看到你在子查询中暴露的内容。

如果您确实需要第二级子查询,则不清楚您显示的内容。如果您没有针对子查询(where ORDEN.some_col = ...)的where子句,则可以将row_number()移动到相同级别的查询中。您可能还需要partition by条款,但它还不清楚。 (也许你错误地创建了第二级子查询,所以你可以添加group by当你真的想要一个partition ...?)

+0

我的查询的最后部分我使用WHERE FILE BETWEEN? AND?。谢谢。 – Chema

+0

@Chema - 对最外面的查询和单个子查询有意义;但是你有两个级别的子查询,并且我不确定最内层的是否需要。很难从你的片段中分辨出来。 –

+0

我使用此查询来使用MyBatis返回分页结果。 – Chema