Запрос не возвращает данные после добавления моего кода в представление - PullRequest
1 голос
/ 11 июля 2019

Ниже приведен фрагмент кода в представлении приложения, но для получения результата требуется много времени, а через 2-3 часа - проблема с табличным пространством.Какой лучший способ написать ниже запрос.Поскольку я должен использовать существующий код для этого требования.

Ниже приведено требование.

Мы должны проверить последние 30 дней с даты последнего выписки на счет, используя следующую формулу

if ((sum of credits for 30 days from the latest statement date w.r. to account/sum debits for 30 days from the latest statement date w.r. to account)-sum debits for 30 days from the latest statement date w.r. to account)>0 then YES else NO

Мой взгляд

CREATE OR REPLACE FORCE VIEW <View_Name> AS
SELECT <List of columns names>,

    (SELECT 
            CASE WHEN ((SUM(DECODE(CR_DR_FLAG,'C',TRANSACTION_AMT,NULL))/DECODE(SUM(DECODE(CR_DR_FLAG,'D',TRANSACTION_AMT,NULL)),0,1))
            -SUM(DECODE(CR_DR_FLAG,'D',TRANSACTION_AMT,NULL)))>0 THEN 'YES' ELSE 'NO' END
            ROLL_C_D FROM SWIFT_TRANSACTION_DETAILS WHERE  CLEAN_SWIFT_ACCT = T_ROLL.SWIFT_ACCT 
            AND CURRENCY_CODE= T_ROLL.CUR AND STATEMENT_DATE BETWEEN  (T_ROLL.STATEMENT_DATE_LATEST-30) AND T_ROLL.STATEMENT_DATE_LATEST 
            GROUP BY CLEAN_SWIFT_ACCT,CURRENCY_CODE ) CR_ACTIVITY_FLAG
  --My Code End         

  FROM
    (SELECT <List of columns names>
    FROM TEMP_BATS_METRIC_REPORT
    UNION ALL
    SELECT <List of columns names>
    FROM VIEW_BATS_METRICS_REPORT
    WHERE MATCHING_STATUS IN('MATCHED TO ARA RECON','Unmatched')
    ) T_ROLL --alias give to 2 tables union all
  ORDER BY MATCHING_STATUS,
    TO_NUMBER(ACT_ID),
    ACCOUNT_MATCHING_TYPE,
    SWIFT_ACCT;

1 Ответ

0 голосов
/ 11 июля 2019

Ваш код необходимо преобразовать в объединения, и я попытался переписать его следующим образом:

SELECT
    <List of columns names - SELECT>,
    CASE
        WHEN ( CR_ACTIVITY_FLAG_C / CASE CR_ACTIVITY_FLAG_D
            WHEN 0   THEN 1
        END ) - CR_ACTIVITY_FLAG_D > 0 THEN 'YES'
        ELSE 'NO'
    END AS CR_ACTIVITY_FLAG
-- ADDED ABOVE SELECT CLAUSE
FROM ( SELECT <List of columns names - SELECT>,

  --My Code Start -- ADDED FOLLOWING 2 
    SUM(DECODE(CR_DR_FLAG,'C',TRANSACTION_AMT,NULL)) AS CR_ACTIVITY_FLAG_C,
    SUM(DECODE(CR_DR_FLAG,'D',TRANSACTION_AMT,NULL)) AS CR_ACTIVITY_FLAG_D,
  --My Code End         

  FROM
    (SELECT <List of columns names>
    FROM TEMP_BATS_METRIC_REPORT
    UNION ALL
    SELECT <List of columns names>
FROM
    VIEW_BATS_METRICS_REPORT
WHERE
    MATCHING_STATUS IN (
        'MATCHED TO ARA RECON',
        'Unmatched'
    )
    ) T_ROLL --alias give to 2 tables union all
-- ADDED FOLLOWING JOIN AND JOIN CONDITIONS
LEFT JOIN SWIFT_TRANSACTION_DETAILS STD 
ON ( CLEAN_SWIFT_ACCT = T_ROLL.SWIFT_ACCT
    AND CURRENCY_CODE = T_ROLL.CUR
        AND STATEMENT_DATE BETWEEN ( T_ROLL.STATEMENT_DATE_LATEST - 30 ) AND T_ROLL.STATEMENT_DATE_LATEST
        )
-- ADDED FOLLOWING GROUP BY
GROUP BY <List of columns names - SELECT>,
CLEAN_SWIFT_ACCT,
CURRENCY_CODE )
ORDER BY
    MATCHING_STATUS,
    TO_NUMBER(ACT_ID),
    ACCOUNT_MATCHING_TYPE,
    SWIFT_ACCT;

Надеюсь, это поможет вам найти направление для решения проблемы.

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...