这几天在做一个需求,要求计算历年同比增长率。物理表中仅有字段为日期、需统计的项值。
同比增长率计算公式为:(本年度数值-上年度数值)/上年度数值。
网上搜索了几种方法,大致分成两类:SSAS立方体(多维数据挖掘)和SQL语句临时表。我都感觉有点大材小用,于是我模拟了一组数据,并尽量简化用两个select语句去实现该需求。模拟数据如下:
第一步把数值的总和统计出来,第二步计算同比增长,完成!
WITH T1 AS ( SELECT ROW_NUMBER() OVER(ORDER BY YEAR(日期)) AS ID ,YEAR(日期) AS 年份 ,SUM(收入) AS 收入 ,SUM(支出) AS 支出 FROM dbo.Table_1 GROUP BY YEAR(日期) ) --SELECT * FROM T1 SELECT A.年份 ,(A.收入 - B.收入) / B.收入 AS 收入同比增长 ,(A.支出 - B.支出) / B.支出 AS 支出同比增长 FROM T1 A LEFT JOIN T1 B ON A.ID-1 = B.ID
ID是自增长标识,步骤一结束后,重新分配一个ID为按年份去编排序号。这一步是下一步统计的关键技巧,下面为统计结果。