2016-08-22 6 views
0

Ich habe diese Anfrage:Ungültige Kennung in OVER 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 
       ... 

und ich erhalte eine Fehlermeldung ‚ungültige Kennung HDC_FEC in OVER-Klauseln. Wenn ich durch ersetze SystemDate funktioniert gut. Warum kann ich HDC_FEC anstelle von SystemDate nicht verwenden?

Vielen Dank.

Antwort

2

Sie sind die HDC_FEC Spalte den Alias ​​SystemDate in der Unterabfrage zu geben, so können Sie nur auf diesen Alias ​​in der äußeren Abfrage verweisen:

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

Die ursprünglichen zugrunde liegenden Tabellenspalten sind nicht sichtbar - sie sind aus Umfang. Sie können nur sehen, was Sie in der Unterabfrage angezeigt haben.

Es ist nicht klar aus dem, was Sie gezeigt haben, wenn Sie tatsächlich die zweite Ebene der Unterabfrage benötigen. Wenn Sie keine Klausel where gegen die Unterabfrage (where ORDEN.some_col = ...) haben, können Sie die row_number() auf die gleiche Abfrageebene verschieben. Möglicherweise benötigen Sie auch die partition by Klausel, aber auch hier ist es nicht klar. (Vielleicht haben Sie die zweite Ebene der Unterabfrage falsch erstellt, so dass Sie group by hinzufügen können, wenn Sie wirklich eine partition ... wollen?)

+0

Letzter Teil meiner Abfrage verwende ich WHERE FILE BETWEEN? UND ?. Vielen Dank. – Chema

+0

@Chema - das ist sinnvoll für die äußerste Abfrage und eine einzelne Unterabfrage; aber Sie haben zwei Ebenen der Unterabfrage, und ich bin mir nicht sicher, ob der innerste benötigt wird. Schwer zu sagen von deinem Schnipsel obwohl. –

+0

Ich benutze diese Abfrage, um Paginierungsergebnis mit MyBatis zurückzugeben. – Chema

Verwandte Themen