繁体   English   中英

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

[英]Subtract from Sum of same column Depending on Dates in SQL

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

我想从下个月结束的计划工作的完成日期中获取“资源名称”,“主管名称”和“计划工作”的输出,其中“计划工作”是该资源减去(减去)的工作的总和(减去)。

下面是一个示例:

  • 资源A的总精力为125%
  • A在2018年5月31日之前的计划工作产出应为50%((50 + 25)-(25 + 25))

  • 资源B的总努力为100%

  • B在2018年5月31日之前的计划工作产出应为50%(50-50)

以下是我正在使用的查询。 资源名称,主管名称和计划的工作来自不同的表。 我正在使用内部联接来组合它们。 我当前遇到的问题是,查询应仅针对计划的总和在指定日期后(包括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

看来您在想复杂化。 您具有资源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;

(您的数据库没有进行规范化。您说每个资源只能有一个主管,但是您的表允许每个资源有不同的主管。因此,这应该是两个表:一个具有资源名称和主管名称的资源表,以及您的计划表,但没有主管名称。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM