Cześć, potrzebuję uzyskać taki wynik(tylko dla danego roku):

employeeID, Month, workTime

Mam wszystkie rzeczy, nawet mam gotowe zapytanie, z tym, że problem jest taki, że mnoży mi wyniki przez ilość dni, jakie są w miesiącu.

Kilka danych: employees - tabela z pracownikami
calendar - tabela kalendarza(trzyma wszystkie daty do 2100 roku i informacje między innymi o miesiącu i roku, czyli niektóre pola to: date, year, month, day...itd)

tabela dwr - trzyma czas pracy pracownika w konkretnym dniu(załóżmy dla ułatwienia, że w sekundach).

Moje zapytanie wygląda tak:

select e.ID, e.name, cal.month, sum(dwr.finalWorkTime)
from employees e
left join calendar cal on cal.year = 2009
left join dwr on dwr.employeeID = e.ID and year(dwr.startDate) = cal.year and month(dwr.startDate) = cal.month
group by cal.month, e.ID, e.name

Wynikiem zapytania jest to, że zamiast pokazywać np. 200000 sekund dla pracownika w miesiącu, to pokazuje mi 200000 * ilość dni w miesiącu.

Domyślam się dlaczego tak jest(nie potrafię tego dobrze opisać), ale nie mam pojęcia, jak to poprawić.

[dopisane]
OK, już se poradziłem. Zostawiam dla potomności.

Tabela dwr jest dołączana tyle razy, ile jest dni w miesiącu, gdyż tak jest dołączana tabela calendar. W związku z tym należało ograniczyć rekordy z tabeli calendar dodatkowym warunkiem: and cal.day = 1, który oznacza, że tabela calendar będzie dołączana dla każdego miesiąca tylko dla pierwszego dnia w tym miesiącu.