根据 SQL 中的日期从同一列的总和中减去
Subtract from Sum of same column Depending on Dates in SQL
我的 SQL Table 包含资源名称、主管姓名、计划工作量、计划完成日期、任务名称
我想获得资源名称、主管姓名和计划工作量的输出,其中计划工作量是该资源工作量的总和(总计)从下个月结束的计划工作量的完成日期减去(减去) .
下面是一个例子:
- 资源 A 的总工作量为 125%
到 2018 年 5 月 31 日,A 的计划工作量的输出应为 50% ((50+25)-(25+25))
资源 B 的总工作量为 100%
- 到 2018 年 5 月 31 日,B 的计划工作量的输出应为 50% (50-50)
下面是我正在使用的查询。
资源名称、主管名称和计划工作量来自不同的表。我正在使用 Inner Join 来组合它们。我目前遇到的问题是,查询应该只输出那些在指定日期后计划工作量总和小于 80% 的资源,包括 where 子句中的所有条件。
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;
(顺便说一句,你的数据库没有规范化。你说每个资源只能有一个主管,但是你的 table 允许每个资源有不同的主管。这应该是两个 table因此:资源 table 带有资源名称和主管名称以及您的计划 table,但没有主管名称。)
我的 SQL Table 包含资源名称、主管姓名、计划工作量、计划完成日期、任务名称
我想获得资源名称、主管姓名和计划工作量的输出,其中计划工作量是该资源工作量的总和(总计)从下个月结束的计划工作量的完成日期减去(减去) .
下面是一个例子:
- 资源 A 的总工作量为 125%
到 2018 年 5 月 31 日,A 的计划工作量的输出应为 50% ((50+25)-(25+25))
资源 B 的总工作量为 100%
- 到 2018 年 5 月 31 日,B 的计划工作量的输出应为 50% (50-50)
下面是我正在使用的查询。 资源名称、主管名称和计划工作量来自不同的表。我正在使用 Inner Join 来组合它们。我目前遇到的问题是,查询应该只输出那些在指定日期后计划工作量总和小于 80% 的资源,包括 where 子句中的所有条件。
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;
(顺便说一句,你的数据库没有规范化。你说每个资源只能有一个主管,但是你的 table 允许每个资源有不同的主管。这应该是两个 table因此:资源 table 带有资源名称和主管名称以及您的计划 table,但没有主管名称。)