2016-08-22 74 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