听起来你只需要以下内容:
select p.projectname,
t.taskname,
bt.taskid,
bt.TotalTime
from projects p
left join projects_tasks pt
on p.projectid = pt.projectid
left join tasks t
on pt.taskid = t.taskid
left join
(
select SUM(bt.actualTotalTime) TotalTime, bt.taskid
from billingtimes bt
group by bt.taskid
) bt
on t.taskid = bt.taskid
如果您提供有关每月日期存储位置的更多详细信息,则可以将其更改为按月分组,以便为您提供每个任务的每月总计。
编辑#1,如果您使用dateOfService
来确定服务的执行时间并且您想按月/年分组,那么您可以使用以下内容:
select p.projectname,
t.taskname,
bt.taskid,
bt.TotalTime,
bt.ServiceMonth,
bt.ServiceYear
from projects p
left join projects_tasks pt
on p.projectid = pt.projectid
left join tasks t
on pt.taskid = t.taskid
left join
(
select SUM(bt.actualTotalTime) TotalTime, bt.taskid,
datepart(month, bt.dateofService) ServiceMonth,
datepart(year, bt.dateofService) ServiceYear
from billingtimes bt
group by bt.taskid, datepart(month, bt.dateofService),
datepart(year, bt.dateofService)
) bt
on t.taskid = bt.taskid