22,209
社区成员
发帖
与我相关
我的任务
分享
WITH T AS (
SELECT Price,
Material_Count,
Price*Material_Count AS TotalPrice,
SUM(Price*Material_Count) OVER() AS Total,
Price*Material_Count/SUM(Price*Material_Count) OVER() AS Share,
ROW_NUMBER() OVER(ORDER BY Price*Material_Count DESC) AS ROW
FROM [Order]
)
,R AS (
SELECT *,
CONVERT(money,TotalPrice) RowTotal,
Share Cum0,
CONVERT(float,TotalPrice / Total) Cum
FROM T
WHERE ROW = 1
UNION ALL
SELECT T.*,
CONVERT(money,R.RowTotal + T.TotalPrice),
R.Cum0 + T.Share,
CONVERT(float,(R.RowTotal + T.TotalPrice) / T.Total)
FROM R
JOIN T
ON R.ROW + 1 = T.ROW
)
SELECT Price,
Material_Count,
TotalPrice,
Share,
Cum0,
Cum
FROM R
Price Material_Count TotalPrice Share Cum0 Cum
--------- -------------- ----------- -------------------------- -------------------------- ----------------------
200.00 400 80000.00 0.4268943436499466382070 0.4268943436499466382070 0.426894343649947
500.00 100 50000.00 0.2668089647812166488794 0.6937033084311632870864 0.693703308431163
200.00 100 20000.00 0.1067235859124866595517 0.8004268943436499466381 0.80042689434365
1.00 10000 10000.00 0.0533617929562433297758 0.8537886872998932764139 0.853788687299893
20.00 400 8000.00 0.0426894343649946638207 0.8964781216648879402346 0.896478121664888
50.00 100 5000.00 0.0266808964781216648879 0.9231590181430096051225 0.92315901814301
10.00 500 5000.00 0.0266808964781216648879 0.9498399146211312700104 0.949839914621131
5.00 500 2500.00 0.0133404482390608324439 0.9631803628601921024543 0.963180362860192
5.00 500 2500.00 0.0133404482390608324439 0.9765208110992529348982 0.976520811099253
5.00 500 2500.00 0.0133404482390608324439 0.9898612593383137673421 0.989861259338314
10.00 100 1000.00 0.0053361792956243329775 0.9951974386339381003196 0.995197438633938
1.00 500 500.00 0.0026680896478121664887 0.9978655282817502668083 0.99786552828175
2.00 200 400.00 0.0021344717182497331910 0.9999999999999999999993 1