sql - скалярный подзапрос Преобразование из Oracle 11g в Netezza - PullRequest
0 голосов
/ 04 ноября 2018

первый раз при переполнении стека Я пытаюсь портировать SQL с Oracle 11 G на Netezza. Но ошибка: эта форма коррелированного запроса не поддерживается - рассмотрите возможность переписывания и я знаю, что Netezza использовать не подзапрос в списке выбора но я не могу представить этот запрос Netezza: Вот SQL:

WITH TABLE1 AS     
    (
    SELECT '201712' AS SETLYM , TO_CHAR(LAST_DAY ('201712')||'01'), YYYYMMDD) AS 
    SETLDT
     FROM DUAL)    
    SELECT /* USE_NL ( PDT A B C E) LEADING (PDT A B C E)     
    INDEX(A IXCTRN09)*/   
    1
    AS NHLCNCLSIGNUAL   
    , BAS.SETLYM   
    , BAS.SETLDT   
    , A.INPCNO   
    , A.PDTCD   
    , A.TPFNGRCD   
    ,A.INSCTRDFNDT   
     ,A.INSOPNDT   
    , A.INSEDDT   
    , B.CTRSTSCD   
    , C.CHGSC   
    ,C.CHGBSNDCD   
    ,C.CHGBASDT   
    ,C.CTRCRCCNCLCD   
    , E.SPCURCD   
     (SELECT SUM(PA APPLPREM)   
          FROM TBCTRDETAIL PA   
        WHERE PA.INPCNO = A.lNPCNO   
        AND PA.SPCURCD =E.SPCURCD   
        AND NVL ( PA . CTRCRCCNCLCD, '1') = '1'    
        AND (PA.INPCNO, PA CTROBUMSQNO,   
        PA SPCURCD, PA.CHGSC) IN (   
        SELECT INPCNO, CTROBUMSQNO, SPCURCD, MAX (CHGSC)   
         FROM TBCTRDETAIL   
         WHERE   
         NVL ( CTRCRCCNCLCD ,'1')='1'   
         AND INPCNO =PA.INPCNO   
         AND CTROBUMSONO =PA.CTROBUMSQNO   
         AND SPCURCD = PA.SPCURCD   
        GROUP BY INPCNO, CTROBUMSQNO, SPCURCD )   
      AS APPLPREM   
    ,SUM(E.MDFCPREM) as MDFCPREM   
    FROM   
     TBSETL  BAS   
    , TBCTRPDT PDT   
    ,TBCTRMA A   
    ,TBCTRSTATUS B   
    ,TBCTRCHGINFO C   
    , TBCTRDETAIL E   
    WHERE 1=1   
    AND PDT.DATASTSCD ='0'   
    AND BAS.SETLDT BETWEEN PDT.APPLSTDT AND PDT.APPLEDDT   
    AND A.CTRBSNDCD='04'     
    AND A.INSOPNDT>=TO_CHAR(TO_NUMBER (SUBSTR(BAS.SETL YM,1,4))-1)|| '0101'   
    AND BAS.SETLDT BETWEEN A.INSOPNDT AND A.INSEDDT   
    AND NVL(A.CTRCRCCNCLCD , '1')='1'    
    AND BAS.SETLDT||'9999'  BETWEEN A.CHGHSTSTNO AND A.CHGHSTEDNO   
    AND A.PDTCD =PDT.PDTCD   
    AND A TPFNGRCD=(CASE WHEN PDT.FMP DPDTHCLFCD-='1' THEN '41'   
    WHEN PDT.FMP DPDTMCLFCD='2' THEN  '42'   
     ELSE ' ' END)   
    AND B.CTRSTSCD IN ('01', '06' , '98')   
    AND NVL (B.CTRCRCCNCLCD, '1')='1'   
    AND BAS.SETLDT||'9999' BETWEEN B.CHGHSTSTNO AND B.CHGHSTEDNO   
    AND B.INPCNO =A.INPCNO   
    AND C.CHGBSNDCD NOT IN ('61','63','70')   
    AND C.ACTGBASDT <=BAS.SETLDT   
    AND C.INPCNO=A.INPCNO      
    AND E.INPCNO=C.INPCNO   
    AND E.CHGCG =C.CHGCG   
    GROUP BY BAS SETLYM, BAS.SETLDT,A.INPCNO ,A.PDTCD,   
      A.TPFNGRCD , A.INSCTRDFNDT ,A.INS OP NDT ,A.INSEDDT ,   
       B.CTRSTSCD, C.CHGSC, C.CHGBSNDCD, C.CHGBASDT,   
         C.CTRCRCCNCLCD, E.SPCURCD;`   

ОШИБКА: (2) Эта форма коррелированного запроса не поддерживается - рассмотрите возможность перезаписи

Как мне переписать этот запрос для Netezza? Пожалуйста, помогите.

...