计算每月SQL的费用

时间:2018-12-09 14:36:11

标签: sql oracle sum

我需要计算每个项目每个月的成本,该项目由任务组成。我有一个员工表,任务表和项目表。但是我不知道如何计算每个月的项目成本,到目前为止,我已经知道了:

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 :(得分:2)

您需要按执行任务的月份对查询进行分组。

另外,您最好使用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');

答案 1 :(得分:0)

假设您为每个可以使用的工作记录设置日期列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');

并且您不应该使用旧的隐式联接sintax,而应使用显式联接sintax

    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');