отличные специалисты по SQL! :) Мой босс хочет месячный/годовой/дневный отчет о работе своего сотрудника. Я вычислил большинство запросов SQL, которые мне нужны, но последний из них выше моего понимания.SQL-запрос с двумя суммами
У меня есть несколько таблиц: лица, службы, планы и услуги. Табличные планы содержат индивидуальный план месяца для каждого человека на каждой службе. Поэтому мне нужен запрос, который возвращает общее значение услуг, предоставляемых каждым человеком в определенный период времени на конкретную услугу и суммарную стоимость запланированной рабочей суммы за тот же период на той же услуге. Теперь у меня есть что-то вроде этого:
SELECT SUM(BoRRenderedServices.ServiceCount),
BoREmployee.Name,
BoRServices.Service,
SUM(BoRTargets.Amount)
FROM BoRRenderedServices, BoREmployee, BoRServices, BoRTargets
WHERE (BoRTargets.EmployeeID = BoREmployee.ID)
AND (BoRTargets.ServiceID = BoRServices.ID)
AND (BoRRenderedServices.Date BETWEEN '2014-1-1' AND '2014-9-19')
AND (BoREmployee.DepartmentID = 'cc42cac9-5ac7-4614-9b7b-ef931a9a132b')
AND (BoRRenderedServices.EmployeeID = BoREmployee.ID)
AND (BoRRenderedServices.ServiceID = BoRServices.ID)
AND (BoRRenderedServices.ServiceID = '0fbf68bf-ace8-4ecb-ba07-7049046c0215')
GROUP BY BoREmployee.Name,
BoRServices.Service
Но этот запрос делает двойную сумму, он суммирует количество предоставляемых услуг в два раза, то же самое касается планов. Я имею в виду, каждый раз, когда он обнаружил, что служба обслуживает условия WHERE, она также суммирует планы, а не добавляет только предоставленную услугу в первый отчет о сумме.
Лицо 1, предоставленное Service1 три раза в августе 1, один раз в августе 3 и 4 раза в июле 4-го. План для Person1 для августа - три, а для июля - четыре.
Желаемый результат:
--------------Plan Fact Service1 1----------1 Service2 1----------2 Service3 1----------3
Фактический выход:
--------------Plan Fact Service1 3----------3 Service2 3----------6 Service3 3----------9
Вы можете разместить фактические данные и желаемый результат? В какой БД есть MySQL, SQL-Server, Oracle, какая версия? Также вы можете опубликовать пример на [sqlfiddle] (http://sqlfiddle.com/) – Max
Старые школы JOIN были дряхлыми в течение примерно 20 лет, используйте ключевое слово JOIN. – HoneyBadger
Приведите пример на sqlfiddle.com – Max