Получить сумму за строку на основе пользователя

Просто хотите попросить помощи о том, как получить сумму за строку в зависимости от пользователя? Я пытаюсь получить стоимость проекта, умножив количество часов, отработанных сотрудником, а затем вычислить его на ставку сотрудника. У меня есть 3 таблицы: Сотрудник, Часы, Проекты

Это похоже на то, как выглядит моя таблица

Для таблицы сотрудников:

Name    |   Rate    |
Emp_A   |   10.50   |
Emp_B   |   15.00   |
Emp_C   |   25.10   |

Для таблицы часов:

Employee    |   Hours   | Project
Emp_A       |   18.50   | PRJ.APP
Emp_A       |   10.00   | PRJ.APP
Emp_B       |   20.00   | PRJ.APP
Emp_B       |   5.30    | PRJ.APP
Emp_C       |   13.00   | PRJ.CAT
Emp_C       |   8.00    | PRJ.CAT

Для таблицы проектов:

Prj_Name    |   Prj_Code    |
Apple       |   PRJ.APP     |
Catalina    |   PRJ.CAT     |

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

SELECT users.employee, SUM(timesheet.hours * 10.50)

FROM Projects prj, Hours timesheet, Employee users

WHERE prj.Prj_Name = 'PRJ.APP'

Результат, который я надеялся получить, например, когда выбрано имя проекта PRJ.APP, получает сотрудника, который работал над этим проектом, и вычисляет его для каждой строки, поскольку ставка отличается для каждого сотрудника.

Я пытался сделать что-то вроде

SELECT if(users.employee = 'Emp_A', SUM(timesheet.hours * 10.50), SUM(timesheet.hours))

FROM Projects prj, Hours timesheet, Employee users

WHERE prj.Prj_Name = 'PRJ.APP'

но при этом будет получена только сумма Emp_A, и на основе примера таблицы Emp_A и Emp_B работали над проектом PRJ.APP.

Желаемый результат для проекта PRJ.APP (сотрудники A и B работали над PRJ.APP):

|   Emp     |   Hours   |   Hours_Sum   |
|   A       |   28.50   |   285         |
|   B       |   25.30   |   379.5       |

Столбец часов представляет собой сумму «Часов» из таблицы «Часы», а Hours_Sum представляет собой столбец «СУММА часов», умноженный на соответствующие ставки сотрудников.

Я надеюсь, что вы, ребята, можете мне помочь. Заранее спасибо!


person hocuspocus31    schedule 21.10.2014    source источник
comment
Вы должны научиться использовать явный синтаксис join. Ваши запросы не работают, потому что вы делаете декартовы произведения. Простое правило: никогда не используйте запятые в предложении from.   -  person Gordon Linoff    schedule 21.10.2014


Ответы (1)


измените свой запрос, как показано, вы должны использовать оба предложения join и group by в своем запросе. Этот запрос вернет результат в виде общей ставки на основе часов, потраченных на каждый проект каждого сотрудника.

select e.name, p.prj_name,SUM(h.hours * e.rate)
from employee e inner join hours h on (e.name = h.employee)
inner join projects p on (p.prj_code = h.project)
group by e.name, p.prj_name
person Abdulla Chozhimadathil    schedule 21.10.2014
comment
Могу я спросить, почему вы использовали открывающую и закрывающую скобки в предложении ON? - person hocuspocus31; 04.12.2014