2016-08-09 3 views
-1

외부 필드를이 하위 쿼리에서 사용할 수없는 이유는 무엇입니까?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 
) 

덕분에

+0

질문이 매우 명확하지 않기 때문에 SO 사용자가 마음에 들었던 독자는 정말 운이 좋았습니다. 외부 필드 * 란 무엇입니까? 그들은 무엇입니까? 현재 검색어는 어떻게됩니까? 오류가 발생합니까? 이것들은 당신이 항상 당신의 질문에 포함시켜야하는 모든 매우 관련된 세부 사항입니다. 또한 제목이 문제와 관련이 없기 때문에 오해의 소지가 있습니다. – sstan

+0

죄송합니다. 다음에 명확하게 될 것입니다! –

답변

0

오라클은 상관 참조에게 깊은 하나의 레벨을 인식합니다. 이 문제를 해결하는 한 가지 방법은 keep 구문을 사용하는 것입니다.

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; 
관련 문제