计算同环比的存储过程,里面有行转列和时间前移

1 篇文章 0 订阅
1 篇文章 0 订阅

 首先对当月数据进行统计,Group By 对不统计字段分组,然后Sum统计数值

    SELECT 
      `TJYF`, `GDDWBM`,`YHBH`,
      SUM(`BYYDL`) BYYDL,    --------统计数据
      SUM(`BYDF`) BYDF     -------- 
    FROM
      `tm_yx_khtz_ydtjfx` 
    WHERE `YHBH` = 
      (SELECT 
        YHBH 
      FROM
        `tm_yx_khtz_jbxx` 
      WHERE YHMC = '李四') 
      AND (
        TJYF = '201002' 
        OR `TJYF` = DATE_FORMAT(
          DATE_SUB(CONCAT('201002', '01'), INTERVAL 1 YEAR),    --------这里是往前一年
          '%Y%m'
        ) 
        OR `TJYF` = DATE_FORMAT(
          DATE_SUB(CONCAT('201002', '01'), INTERVAL 1 MONTH),    --------这里是往前一个月
          '%Y%m'
        )
      ) 
    GROUP BY 
      `TJYF`,
      `GDDWBM`,
      `YHBH`    --------对不统计字段进行分组操作

 

然后把上面字段作为子查询,进行   列转行   操作,贴出两个核心SQL,把行相当于做循环,用判断把列数据转为行

SUM(
  CASE
    R.TJYF 
    WHEN 201002                 -----------------这里判断时间是否是本月
    THEN R.BYYDL                -----------------符合条件,放置数据 
    ELSE NULL                   -----------------不然置空
  END
) CURRENT_BYYDL,
SUM(
  CASE
    R.TJYF 
    WHEN DATE_FORMAT(
      DATE_SUB(
        STR_TO_DATE('20100201', '%Y%m%d'),
        INTERVAL 1 YEAR           -----------------这里判断时间是否是减去一年的
      ),
      '%Y%m'
    )
    THEN R.BYDF                   -----------------符合条件,放置数据
    ELSE NULL                     -----------------不然置空
   END
)

 

最后就把数据进行计算即可,然后丢给前台做处理

((S.CURRENT_BYYDL - S.RING_BYYDL) / S.RING_BYYDL) * 100 RING_BYYDL_RATE,
((S.CURRENT_BYYDL - S.SAME_BYYDL) / S.SAME_BYYDL) * 100 SAME_BYYDL_RATE,

同比 ,(今年值 - 去年值) / 去年值 * 100%
环比 ,(今年之 - 上月值) / 上月值 * 100%

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值