我是靠谱客的博主 迷路曲奇,最近开发中收集的这篇文章主要介绍ORACLE——一条SQL计算同比、环比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 按照月份进行计算:

SELECT 
D.YEARMONTH,
D.VALUE,
TO_CHAR(NVL(ROUND(DECODE(D.monthOnMonth,0,NULL,(D.VALUE - D.monthOnMonth )/D.monthOnMonth * 100),2), 0), 'fm9999999990.00') || '%' 环比增长率,
TO_CHAR(NVL(ROUND(DECODE(D.yearOnYear,0,NULL,(D.VALUE - D.yearOnYear)/D.yearOnYear * 100),2), 0),'fm9999999990.00')  || '%' 同比增长率
FROM (
    SELECT
    C.YEARMONTH,
    C.VALUE,
    LAG (C.VALUE, 1, 0) OVER (ORDER BY C.YEARMONTH) AS monthOnMonth,
    LAG (C.VALUE, 12, 0) OVER (ORDER BY C.YEARMONTH) AS yearOnYear
    FROM (
        SELECT A.YEARMONTH, NVL(B.VALUE, 0) VALUE FROM 
            (SELECT TO_CHAR( ADD_MONTHS( TO_DATE( '202101', 'yyyyMM' ), ROWNUM - 1), 'yyyyMM') AS YEARMONTH FROM DUAL CONNECT BY ROWNUM <= months_between( to_date('202212', 'yyyyMM'), to_date( '202101', 'yyyyMM')) + 1) A
        LEFT JOIN
            (
                SELECT TO_CHAR(CYJSSJ, 'yyyyMM') YEARMONTH, NVL(COUNT(*), 0) VALUE FROM BA_JBXX WHERE TO_CHAR(CYJSSJ, 'yyyyMM') >=  202101 AND TO_CHAR(CYJSSJ, 'yyyyMM') <= 202212 
                GROUP BY TO_CHAR(CYJSSJ, 'yyyyMM') ORDER BY TO_CHAR(CYJSSJ, 'yyyyMM')
            ) B 
        ON A.YEARMONTH = B.YEARMONTH ORDER BY A.YEARMONTH
    ) C
) D WHERE D.YEARMONTH >= 202001 AND D.YEARMONTH <= 202212

 

最后

以上就是迷路曲奇为你收集整理的ORACLE——一条SQL计算同比、环比的全部内容,希望文章能够帮你解决ORACLE——一条SQL计算同比、环比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部