有人可以帮助我获得累计金额和百分比。我在“功能”表中有三个字段
vertical|Defects(F)|Defects(NF)|
Billing | 193 |678
Provi |200 |906
Billing |232 |111
Analyt |67 |0
Provi |121 |690
我希望最终输出为
Vertical|Total Defects|Cumulative Defects|Cumulative%
Billing |1214 | 1214 |37.96%
Provi |1917 | 3131 |97.90%
Analyt |67 | 3198 |100.00%
请注意,我有大约300万行,而且数据日复一日地增加。
答案 0 :(得分:0)
我发现获取累积总和的最简单方法是使用相关子查询 - 除非您具有SQL Server 2012中窗口函数的全部功能
然而,这带来了一些挑战。首先,您需要按垂直方式进行总结。然后,您需要按正确的顺序订购垂直线。最后,您需要以您希望的方式输出结果:
这应该接近你想要的:
with d as
(select vertical, sum(Defects_N + Defects_NF) as Defects,
(case when vertical = 'Billing' then 1
when vertical = 'Provi' then 2
else 3
end) as num
from t
group by vertical
)
select vertical, defects as TotalDefects, cumDefects,
100 * cast(cumDefects as float) / fulldefects as DefectPercent
from (select d.*,
(select sum(defects) from d d2 where d2.num <= d.num
) as cumdefects,
SUM(defects) over () as fulldefects
from d
) d
答案 1 :(得分:0)
好的可能会有人试图获得类似的输出。以下是我为获得所需输出所做的工作。非常感谢戈登,你的建议实际上帮助我实现了这个目标
with d as
(SELECT ROW_NUMBER () OVER
(ORDER BY SUM([DEFECTS(F)]+[DEFECTS(NF)]) asc) NUM,
VERTICAL,
SUM([DEFECTS(F)]+[DEFECTS(NF)]) AS [DEFECTS]
FROM Capability
GROUP BY VERTICAL
)
select left(vertical,5) as Vertical, defects as TotalDefects, cumDefects,
cast(cumDefects as float) / fulldefects as DefectPercent
from (select d.*,
(select sum(defects) from d d2 where d2.num <= d.num
) as cumdefects,
SUM(defects) over () as fulldefects
from d
) d