Рассчитать стоимость за каждый месяц SQL - PullRequest
0 голосов
/ 09 декабря 2018

Мне нужно рассчитать стоимость для каждого проекта за каждый месяц, проект состоит из задач.У меня есть таблица сотрудников, таблица задач и таблица проекта.Но я не знаю, как рассчитать стоимость проекта каждый месяц, пока у меня есть это:

SELECT 
    P.PROJECT_NAME, 
    SUM(T.HOURS_WORKED * E.HOURLY_RATE) COST
FROM 
    PROJECT P,
    TASKS T,
    EMPLOYEE E
WHERE 
    E.EMPLOYEE_ID = T.EMPLOYEE_ID
    AND P.PROJECT_ID = T.PROJECT_ID
GROUP BY P.PROJECT_NAME;

, но это не сработает, сколько взимается за проект каждый месяц, этопросто рассчитывает общую стоимость путем расчета часов, отработанных сотрудниками, по почасовой ставке сотрудника.В таблице задач у меня есть столбец date_worked, в котором отображаются день, месяц и год, но я не знаю, нужно ли это использовать или нет.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вам нужно сгруппировать ваш запрос по месяцу, когда задача была выполнена.

Также вам лучше использовать JOIN.

SELECT 
    P.PROJECT_NAME, 
    TRUNC(T.DATE_WORKED, 'month') MONTH,
    SUM(T.HOURS_WORKED * E.HOURLY_RATE) COST
FROM 
    TASKS T
    INNER JOIN PROJECT P ON P.PROJECT_ID = T.PROJECT_ID
    INNER JOIN EMPLOYEE E ON E.EMPLOYEE_ID = T.EMPLOYEE_ID
GROUP BY P.PROJECT_NAME, TRUNC(T.DATE_WORKED, 'month');
0 голосов
/ 09 декабря 2018

Предполагая, что у вас есть столбец даты date_work для каждой рабочей записи, вы можете использовать

    SELECT P.PROJECT_NAME
            , to_char(date_work, 'YYYY-MM')
            , SUM(T.HOURS_WORKED * E.HOURLY_RATE) COST
    FROM PROJECT P, TASKS T, EMPLOYEE E
    WHERE E.EMPLOYEE_ID = T.EMPLOYEE_ID
    AND P.PROJECT_ID = T.PROJECT_ID
    GROUP BY P.PROJECT_NAME,  to_char(date_work, 'YYYY-MM');

, и вам не следует использовать старый синтаксис неявного соединения, а использовать явный синтаксис объединения

    SELECT P.PROJECT_NAME
            , to_char(date_work, 'YYYY-MM')
            , SUM(T.HOURS_WORKED * E.HOURLY_RATE) COST
    FROM PROJECT P
    INNER JOIN TASKS T ON P.PROJECT_ID = T.PROJECT_ID
    INNER JOIN EMPLOYEE E ON  E.EMPLOYEE_ID = T.EMPLOYEE_ID
    GROUP BY P.PROJECT_NAME,  to_char(date_work, 'YYYY-MM');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...