2016-08-09 68 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

你真的很幸運,有些讓網友們心中的讀者,因爲你的問題是非常,非常清楚。你的意思是什麼?外部領域*?他們是哪一個?你目前的查詢會發生什麼?你得到一個錯誤,哪一個?這些都是非常相關的細節,你應該總是包括在你的問題中。此外,您的標題具有誤導性,因爲它與您的問題無關。 – 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;