减去相同列的总和取决于SQL中的日期

时间:2018-04-24 15:13:23

标签: sql subtraction

我的SQL表包含资源名称,主管名称,计划工作量,计划完成日期,任务名称

我希望得到资源名称,主管名称和计划工作的输出,其中计划的努力是计划工作完成日期中的资源减去(减去)的努力的总和(总计),该日期将在下个月结束。< / p>

以下是一个示例:

  • 资源A的总工作量为125%
  • 截至5/31/2018的A计划工作量的输出应为50%((50 + 25) - (25 + 25))

  • 资源B的总工作量为100%

  • 截至5/31/2018的B计划工作量的输出应为50%(50-50)

以下是我正在使用的查询。 资源名称,主管名称和计划的工作来自不同的表。我正在使用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

1 个答案:

答案 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;

(你的数据库没有规范化。你说每个资源只能有一个主管,但是你的表允许每个资源使用不同的主管。因此应该是两个表:一个带有资源名称的资源表和主管名称和计划表,但没有主管名称。)