для того, чтобы сделать это, вы, вероятно, хотите, чтобы доходы и расходы на отдельные подзапросов.
Я взял две части вашего запроса на объединение и разделил их на подзапросы, называемые доходами, и один называется расходами. Оба подзапроса суммируют данные за месячный период, как и раньше, но теперь вы можете использовать JOIN в месяцах, чтобы разрешить подключение данных из каждого подзапроса. Примечание. Я использовал OUTER JOIN, потому что он все равно присоединится к месяцу, где нет дохода, но есть расходы и наоборот. Это потребует некоторых манипуляций, потому что вам, вероятно, лучше вернуть набор нулей за месяц, если транзакция не произойдет.
На верхнем уровне SELECT следует заменить *, указав нужный вам список полей. Я просто использовал это, чтобы показать, что каждое поле может быть повторно использовано из подзапроса во внешнем запросе, обратившись к псевдониму как имя таблицы.
SELECT Income.*, Expenses.*
FROM (SELECT TO_DATE(TO_CHAR(PAY_DATE,'MON-YYYY'), 'MON-YYYY') as Month, 'FEE RECEIPT', NVL(SUM(SFP.AMOUNT_PAID),0) AMT_RECIEVED
FROM STU_FEE_PAYMENT SFP, STU_CLASS SC, CLASS C
WHERE SC.CLASS_ID = C.CLASS_ID
AND SFP.STUDENT_NO = SC.STUDENT_NO
AND PAY_DATE BETWEEN '01-JAN-2014' AND '31-DEC-2014'
AND SFP.AMOUNT_PAID >0
GROUP BY TO_CHAR(PAY_DATE,'MON-YYYY') Income
OUTER JOIN (SELECT TO_DATE(TO_CHAR(EXP_DATE,'MON-YYYY'), 'MON-YYYY') as Month, ET.DESCRIPTION, SUM(EXP_AMOUNT)
FROM EXP_DETAIL ED, EXP_TYPE ET, EXP_TYPE_DETAIL ETD
WHERE ET.EXP_ID = ETD.EXP_ID
AND ED.EXP_ID = ET.EXP_ID
AND ED.EXP_DETAIL_ID = ETD.EXP_DETAIL_ID
AND EXP_DATE BETWEEN '01-JAN-2014' AND '31-DEC-2014'
GROUP BY TO_CHAR(EXP_DATE,'MON-YYYY'), ET.DESCRIPTION) Expenses
ON Income.Month = Expenses.Month
Есть еще много расчетов, которые вам придется вставить, чтобы получить конечный результат, который вы должны будете работать отдельно. Полученный запрос выполнить то, что вы ожидаете выше, вероятно, будет намного дольше, чем это, я просто пытаюсь показать вам структуру.
Однако последняя сложная часть для вас будет BBF. Баланс купил вперед. SQL отлично сочетает таблицы и столбцы, но каждая строка обрабатывается и обрабатывается отдельно, она не считывает и не оценивает предыдущую строку в запросе и не позволяет вам манипулировать этим значением в следующей строке. Для этого вам нужен еще один подзапрос для SUM() всех изменений с момента времени до начала месяца. Финансовые продукты обычно хранят баланс в моменты времени, потому что возможно, что не все транзакции точно записаны, и должен быть механизм для настройки баланса. Используя эту теорию, вам нужно написать свой подзапрос, чтобы суммировать все изменения со времени предыдущего Баланса.
IMO Финансовые приложения по своей сути сложны, поэтому решение займёт некоторое время, чтобы сформировать правильное решение.
Заключительное слово: я не знаком с OracleReports, но там может быть что-то, что поможет поддерживать BBF.
Что случилось с присоединением к месяцу? У вас есть доход за каждый месяц, который имеет расходы и наоборот? –
(1) в одном запросе мы не можем отобразить результат матрицы, (2) для результата матрицы. Я попробовал следующие объединения запросов, но мне нужны некоторые РАСЧЕТЫ, например: итоги и BBF (баланс широкий вперед) и текущий баланс. как определить долю дохода в общей сумме и расходной части. – Muhammad
Рассмотрите возможность изменения заголовка на что-то вроде «Создание сводного отчета о доходах и расходах в Oracle Reports» и включите тег для финансирования. У людей с финансовым опытом, вероятно, будет хороший ответ, если вы сможете привлечь их внимание. –