Попытка вычислить сумму из другого столбца в материализованном представлении - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь вычислить сумму рабочих дней в месяце в Oracle MV

Вот мой запрос:

CREATE MATERIALIZED VIEW DIM_DATE_MV
BUILD IMMEDIATE
REFRESH COMPLETE ON DEMAND
START WITH sysdate NEXT (TRUNC(sysdate)+1)  + 7 / 24
as SELECT
CAL.DATE_D as ID_DATE,
(CASE WHEN (
    (TRIM(TO_CHAR(CAL.DATE_D,'Day','nls_date_language=english')) IN ('Saturday','Sunday')) OR 
    (TRIM(TO_CHAR(CAL.DATE_D,'DD-MM')) IN ('01-01', '01-05', '08-05', '14-07', '15-08', '01-11', '11-11', '25-12')) OR 
    (TO_CHAR(CAL.DATE_D, 'DD-MM-YYYY') IN  (SELECT TO_CHAR(DOFF.DATE_OFF, 'DD-MM-YYYY') FROM ODSISIC.DAY_OFF DOFF where DOFF.IMPACT='ALL'))
           )  THEN 0 ELSE 1 END) as IS_WORKING_DAY,


(CASE WHEN TO_CHAR(CAL.DATE_D , 'YYYY-MM') = TO_CHAR(CAL.DATE_D , 'YYYY-MM') THEN (Select SUM(IS_WORKING_DAY) from DIM_DATE_MV group by CAL.YEAR_MONTH_NUM) ELSE 0 END)
 as NB_WORKING_DAY_MONTH

FROM ODSISIC.ORACLE_CALENDAR CAL
LEFT JOIN ODSISIC.DAY_OFF DOFF
ON DOFF.DATE_OFF = CAL.DATE_D

IS_WORKING_DAY = 0, если это выходные, выходные или дата втаблица DATE_OFF, которая содержит все праздники с разными датами из года в год.

Я хочу, чтобы SUM GROUP BY месяц IS_WORKING_DAY = 1 в NB_WORKING_DAY_MONTH.

Как можно вычислить эту сумму непосредственно вмой запрос, а не создание промежуточной таблицы для моего соединения с таблицей DAY_OFF?

Спасибо:)

1 Ответ

0 голосов
/ 18 октября 2018

Подумав разумно, я решил, повторив свой SQL-запрос:

CREATE MATERIALIZED VIEW DIM_DATE_MV
BUILD IMMEDIATE
REFRESH COMPLETE ON DEMAND
START WITH sysdate NEXT (TRUNC(sysdate)+1)  + 7 / 24
as SELECT
CAL.DATE_D as ID_DATE,
IS_WORKING_DAY as IS_WORKING_DAY,

A.SUM as NB_WORKING_DAY_MONTH

FROM  (SELECT SUM(IS_WORKING_DAY) as SUM, OCAL.YEAR_MONTH_NUM as ID_MONTH from ODSISIC.ORACLE_CALENDAR OCAL group by OCAL.YEAR_MONTH_NUM) A
INNER JOIN ODSISIC.ORACLE_CALENDAR CAL 
on CAL.YEAR_MONTH_NUM = A.ID_MONTH
LEFT JOIN ODSISIC.DAY_OFF DOFF
ON DOFF.DATE_OFF = CAL.DATE_D
;

Я рассчитал рабочие дни перед созданием представления (что означает, что моя таблица DATE_OFF должна быть подана до ORACLE_CALENDAR)

Я добавил соединение, чтобы заполнить свою таблицу в соответствии с id_month.

Теперь она работает нормально

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