样本数据
异常输出
数学运算
将每个的所有 Period 时间相加
EmpName
为Total Employee Time
Sum Similar Tasks For
EmpName
,除以Total Employee Time
并乘以 100%
请帮我
我正在使用 SQL Server Management 2008,这是我的尝试:
select EmpName,Task,Period_Time,
sum(Period_Time)/(select sum(Period_Time) as total from dbo.TableName)
as percentage
from dbo.TableName
group by EmpName,Task,Period_Time
order by EmpName
你的方法很接近。我可以看到的两个问题是:
子查询与外部查询不相关。您的子查询需要有一个
WHERE
子句来将行限制EmpName
为与外部查询相同的行EmpName
。为了能够引用外部查询的列,您需要为 的任一实例分配不同的别名
dbo.TableName
。最好为每个分配一个——像这样:主查询不需要分组依据
Period_Time
,因为它正在聚合该值。只需从和中删除该
Period_Time
列。GROUP BY
SELECT
因此,这就是解决这两个问题后您的查询的样子:
但是,您可以在此处使用相关子查询做得更好。从 SQL Server 2005 开始,Transact-SQL 开始支持窗口聚合函数。它们允许您获得汇总结果和详细结果,并将两者用于各种计算——这正是您解决问题所需要的。
基本上,语法是这样的:
只有一个问题:您不能这样计算总数
Period_Time
:因为在您的情况下
Period_Time
将是无效引用:该列不在 GROUP BY 中,并且如果不包含在(非窗口)聚合函数中则可能无法引用。您的主查询已经使用 SUM 对其进行了聚合——这也是它的使用SUM ... OVER
方式:作为参考,下面是一个完整查询的示例,它使用窗口聚合而不是相关子查询来计算百分比: