![](/img/trans.png)
[英]SQL Query (Sybase): Subtract 1 from the sum of one column depending on the value of another
[英]Subtract from Sum of same column Depending on Dates in SQL
我有带有资源名称,主管名称,计划的工作量,计划的完成日期,任务名称的SQL表
我想从下个月结束的计划工作的完成日期中获取“资源名称”,“主管名称”和“计划工作”的输出,其中“计划工作”是该资源减去(减去)的工作的总和(减去)。
下面是一个示例:
A在2018年5月31日之前的计划工作产出应为50%((50 + 25)-(25 + 25))
资源B的总努力为100%
以下是我正在使用的查询。 资源名称,主管名称和计划的工作来自不同的表。 我正在使用内部联接来组合它们。 我当前遇到的问题是,查询应仅针对计划的总和在指定日期后(包括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.