2016-08-09 6 views
-1

Warum die externen Felder können nicht in dieser Unterabfrage verwendet werden?mit ROWNUM TOP-N

SELECT d1_cod, 
     D1_VUNIT, 
    (
    SELECT sd2.d1_vunit from (select d1_filial,d1_vunit,d1_emissao,d1_cod,d1_doc) 
     FROM sd1160 sd12 
    WHERE sd12.D1_EMISSAO < **x.d1_emissao** 
     And sd12.D1_FILIAL = **x.d1_filial** 
     And sd12.D1_COD = **x.d1_cod** 
     And sd12.D_E_L_E_T_ = ' ' 
    ORDER BY sd12.d1_emissao DESC) 
    Where ROWNUM < 2) 
     FROM sd1160 x 
    WHERE x.D_E_L_E_T_ = ' ' 
     AND x.d1_emissao = '20160808' 
    ORDER BY x.d1_emissao DESC 
) 

Dank

+0

Sie sind wirklich Glück, dass einige SO Benutzer sind Geist Leser, denn Ihre Frage ist sehr, sehr unklar. Was meinst du mit * externen Feldern *? Welche sind sie? Was passiert mit Ihrer aktuellen Anfrage? Erhalten Sie einen Fehler, welcher? Dies sind alles sehr wichtige Details, die Sie immer in Ihre Frage aufnehmen sollten. Außerdem ist Ihr Titel irreführend, da er nichts mit Ihrem Problem zu tun hat. – sstan

+0

Entschuldigung dafür. In der nächsten wird klarer sein! –

Antwort

0

Oracle erkennt nur korrelierte Referenzen auf einer Ebene tief. Eine Möglichkeit, dies zu umgehen ist es, die keep Syntax:

SELECT d1_cod, 
     D1_VUNIT, 
     (SELECT MAX(st12.d1_vunit) KEEP (DENSE_RANK FIRST ORDER BY sd12.d1_emissao DESC) 
     FROM sd1160 sd12 
     WHERE sd12.D1_EMISSAO < **x.d1_emissao** AND 
       sd12.D1_FILIAL = **x.d1_filial** AND 
       sd12.D1_COD = **x.d1_cod** AND 
       sd12.D_E_L_E_T_ = ' ' 
     ) 
FROM sd1160 x 
WHERE x.D_E_L_E_T_ = ' ' AND x.d1_emissao = '20160808' 
ORDER BY x.d1_emissao DESC; 
Verwandte Themen