[英]How to calculate the sum of a column SQL?
需要一些帮助。
我的桌子如下->
项目名称 | 日期 | 记录时间 | 计划时间 | 剩余_小时 |
---|---|---|---|---|
民用 | 06-03-2022 | 5个 | 10 | 5个 |
民用 | 07-03-2022 | 3个 | 7 | 4个 |
民用 | 08-03-2022 | 9 | 9 | 0 |
民用 | 09-03-2022 | 4个 | 10 | 6个 |
民用 | 10-03-2022 | 8个 | 5个 | -3 |
民用 | 11-03-2022 | 8个 | 8个 | 0 |
民用 | 12-03-2022 | 0 | 5个 | -5 |
民用 | 13-03-2022 | 0 | 4个 | -4 |
民用 | 14-03-2022 | 0 | 3个 | -3 |
民用 | 15-03-2022 | 0 | 4个 | -4 |
民用 | 15-03-2022 | 0 | 5个 | -5 |
这里我只有一个项目,但实际上我有多个项目。
在此表中, Recorded_Hours是每天完成的总小时数, Planned_Hours是每天计划的总小时数, Remaining_Hours是( Planned_Hours - Recorded_Hours )。 我想总结直到今天的所有Remaining_Hours然后将该总和平均分配给每个未来的Planned_Hours 。
在上表中,到今天为止的Remaining_Hours总和为12 ,还有5 天可以完成该项目。 我想将12/5添加到每5 天剩余的 Planned_Hours中。 这应该每天自动计算。
我的 output 将是 ->
项目名称 | 日期 | 记录时间 | 计划时间 | 剩余_小时 |
---|---|---|---|---|
民用 | 06-03-2022 | 5个 | 10 | 5个 |
民用 | 07-03-2022 | 3个 | 7 | 4个 |
民用 | 08-03-2022 | 9 | 9 | 0 |
民用 | 09-03-2022 | 4个 | 10 | 6个 |
民用 | 10-03-2022 | 8个 | 5个 | -3 |
民用 | 11-03-2022 | 8个 | 8个 | 0 |
民用 | 12-03-2022 | 0 | 7.4 | -7.4 |
民用 | 13-03-2022 | 0 | 6.4 | -6.4 |
民用 | 14-03-2022 | 0 | 5.4 | -5.4 |
民用 | 15-03-2022 | 0 | 6.4 | -6.4 |
民用 | 15-03-2022 | 0 | 7.4 | -7.4 |
到现在为止我已经达到了这一点
SELECT
[Project_Name]= CASE WHEN GROUPING(Date) = 0 THEN [Project_Name]ELSE 'Total' END,
Date,
[Remaining_Hours] = SUM([Planned_Hours]-[Recorded_Hours])
FROM[dbo].[Projects]
GROUP BY GROUPING SETS (
([Project_Name], Date),
([Project_Name]));
首先,您找到每个项目截至今天的总剩余小时数 (GROUP BY)
select Project, Total_Remaining_Hours = sum(Remaining_Hours),
from Projects
where [Date] <= @today
group by Project
那么你还需要剩余天数
select Project, Remaining_Days = count(*)
from Projects
where [Date] > @today
group by Project
将它们组合在一起(INNER JOIN)并使用CASE
表达式进行检查,忽略过去的日期并仅调整未来的日期
declare @today date = getdate();
select *,
New_Planned_Hours = case when p.[Date] <= @today
then p.Planned_Hours
else p.Planned_Hours
+ (t.Total_Remaining_Hours / d.Remaining_Days)
end
from Projects p
inner join
(
select Project,
Total_Remaining_Hours = sum(Remaining_Hours)
from Projects
where [Date] <= @today
group by Project
) t on p.Project = t.Project
inner join
(
select Project,
Remaining_Days = count(*)
from Projects
where [Date] > @today
group by Project
) d on p.Project = d.Project
order by p.Project, p.[Date]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.