这几天在做一个需求,要求计算历年同比增长率。物理表中仅有字段为日期、需统计的项值。

  同比增长率计算公式为:(本年度数值-上年度数值)/上年度数值。

  网上搜索了几种方法,大致分成两类: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为按年份去编排序号。这一步是下一步统计的关键技巧,下面为统计结果。