У меня есть запрос на объединение с 2 частями. Часть 1 вычисляет сумму платежей за последний месяц, а часть 2 рассчитывает количество заявлений за последний месяц. Я использую следующий запросОбъединить результаты двух союзов
WITH DATA AS(
(SELECT DA.ID, DDO.CODE, NULL AS PAYMENTS, ABS(SUM(FAT.AMOUNT_IN_DEFAULT_CURRENCY)) AS STATEMENTS --, FPP.AMOUNT_IN_DEFAULT_CURRENCY AS PAYMENTS
FROM DIM_ACCOUNT DA
JOIN DIM_DATA_OWNER DDO ON DA.DATA_OWNER_ID = DDO.ID
JOIN FACT_AS_TRANSACTION FAT ON FAT.ACCOUNT_ID = DA.ID
JOIN DIM_DATE DD ON FAT.VALUE_DATE_ID = DD.ID
WHERE DD.CAL_DATE >= TO_DATE('2015-09-20', 'YYYY-MM-DD')
AND FAT.DEBIT_CREDIT_MARK = 'Debit'
GROUP BY DA.ID, DDO.CODE
HAVING SUM(FAT.AMOUNT_IN_DEFAULT_CURRENCY) != 0)
UNION
(SELECT DA.ID, DDO.CODE, ABS(COALESCE(SUM(FPP.AMOUNT_IN_DEFAULT_CURRENCY),0)) AS PAYMENTS, NULL
FROM DIM_ACCOUNT DA
JOIN DIM_DATA_OWNER DDO ON DA.DATA_OWNER_ID = DDO.ID
JOIN FACT_PAY_PAYMENT FPP ON FPP.ORDERING_ACCOUNT_ID = DA.ID
JOIN DIM_PAY_PAYMENT_METHOD DPPM ON DPPM.ID = FPP.PAYMENT_METHOD_ID
JOIN DIM_DATE DD ON FPP.REQUESTED_EXECUTION_DATE_ID = DD.ID
WHERE DD.CAL_DATE >= TO_DATE('2015-09-20', 'YYYY-MM-DD')
GROUP BY DA.ID, DDO.CODE)
)
SELECT * FROM DATA
Это дает следующий вывод То, что я хочу показать, заявление и выплаты по 1 линии. Поэтому этот результат должен быть объединен с 2 строками: Как вы это понимаете?
использование DISTINCT по ID каждой таблицы и попробовать. Пример: SELECT DISTINCT (id) FROM TABLE WHERE CONDITION. –
Не следует ли лучше использовать агрегацию MAX для платежей и выписок? и группа по идентификатору и коду? – Jonas
Попробуйте поставить 0 вместо NULL, затем сделайте все подзапрос, а во внешнем запросе выберите MAX of PAYMENTS и STATEMENTS. –