我的SQL表包含资源名称,主管名称,计划工作量,计划完成日期,任务名称
我希望得到资源名称,主管名称和计划工作的输出,其中计划的努力是计划工作完成日期中的资源减去(减去)的努力的总和(总计),该日期将在下个月结束。< / p>
以下是一个示例:
截至5/31/2018的A计划工作量的输出应为50%((50 + 25) - (25 + 25))
资源B的总工作量为100%
以下是我正在使用的查询。 资源名称,主管名称和计划的工作来自不同的表。我正在使用Inner Join来组合它们。我当前遇到的问题是,查询应该只为那些在指定日期(包括where子句中的所有条件)之后计划工作量小于80%的资源提供输出。
Declare @MonthStart Date
Declare @MonthFinish Date
Set @MonthFinish = '5/31/2018'
Select
r.resourcename AS [Resource Name]
--,ru.[Supervisor Name]
--,t.taskname AS [Project Name]
,SUM(a.assignmentpeakunits) AS [Occupied %]
from assignment a
Inner Join Task t on a.TaskUID = t.taskuid
Inner Join Resource R on a.resourceuid = R.ResourceUId
Inner Join Resource_UserView RU on a.resourceuid = ru.resourceuid
Where a.projectuid = '04D0A859-CFE4-E611-8109-0025B52F0120'
and a.assignmentfinishdate > @MonthFinish
and r.ResourceName <> 'Unassigned Resource'
and a.AssignmentPeakUnits < 80
Group By r.ResourceName
Order by r.ResourceName
答案 0 :(得分:0)
你似乎想要复杂化。你有这些行用于资源A:
planned_finish_date planned_effort 2018-04-30 25% 2018-05-31 50% 2018-09-30 25% 2018-12-28 25%
你明确表示总共有125%,并且在2018-05-31 25 + 50 = 75%将会完成,所以25 + 25 = 50%仍然存在,而这50%你想表现出来。但无论总百分比是多少,无论做多少,你只需要在给定日期之后得到百分比的总和。
select
resource_name,
supervisor_name,
sum(planned_effort) as total
from mytable
where planned_finish_date > date '2018-05-31'
group by resource_name, supervisor_name
order by resource_name, supervisor_name;
(你的数据库没有规范化。你说每个资源只能有一个主管,但是你的表允许每个资源使用不同的主管。因此应该是两个表:一个带有资源名称的资源表和主管名称和计划表,但没有主管名称。)