Вы можете взять UNION
из двух запросов, сначала запрос monthly
, а затем выбрать только первую строку из результата
SELECT "date", emp_id, sal
FROM (
SELECT 0 AS rnk,
TO_CHAR(SAL_DATE) AS "date",
emp_id,
SUM(MSAL) AS sal
FROM SALY_MONTH
WHERE SAL_DATE = TO_CHAR(sysdate, 'YYYYMM')
AND EMP_ID = 123
GROUP BY SAL_DATE, EMP_ID
UNION ALL
SELECT 1,
SUBSTR(SAL_DATE, 1, 6),
emp_id,
SUM(dsal)
FROM SAL_DAILY
WHERE SAL_DATE = TO_CHAR(SYSDATE-1, 'YYYYMMDD')
AND EMP_ID = 123
GROUP BY SUBSTR(SAL_DATE, 1, 6), EMP_ID
ORDER BY rnk
) s
WHERE ROWNUM = 1
Вывод для ваших данных образца:
date EMP_ID SAL
202005 123 22743859.69
Демо на SQLFiddle
Обратите внимание, что это дает другой результат по сравнению с ожидаемым результатом, который суммирует все дневные зарплаты за май, даже если запрос только в вашем вопросе смотрит на позавчера. Если вы делаете хотите просуммировать все дневные зарплаты за май, измените эту строку:
WHERE SAL_DATE = TO_CHAR(SYSDATE-1, 'YYYYMMDD')
на
WHERE SUBSTR(SAL_DATE, 1, 6) = TO_CHAR(SYSDATE, 'YYYYMM')
И вы получите:
date EMP_ID SAL
202005 123 46505087.46
Демонстрация на SQLFiddle