新手求教oracle同比和环比sql语句

Drat殇 2013-08-02 01:19:37
数据表
create table d_month_salary(
id number(2) primary key,
salaryMonth varchar2(10),
salary number(10));

查询数据如下:


请高手们指点指点,感激不尽撒...
...全文
1348 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010412956 2013-08-02
  • 打赏
  • 举报
回复
引用 3 楼 u011139190 的回复:
谢谢回帖,不过上面的同比怎么没有数据呢? 下面的环比也不是我所期望的值哈... 环比公式:(当年值-上年值)/上年值x100 = 增长率% 以上一定有负值,可惜你得到的全都是正值
sql给你了,公式对着修改就是了。。简单
u010412956 2013-08-02
  • 打赏
  • 举报
回复
引用 2 楼 guanchaoyi 的回复:
先搞清同比和环比的概念: 同比是今年和去年同一个月份比较;环比是今年这个月份和上个月份比较。 上面这个兄台写得有点BUG,我修正一下:

/* Formatted on 2013/08/02 15:00 (Formatter Plus v4.8.7) */
SELECT   t.salarymonth,
           SUM (t.salary)
         / (SELECT SUM (t1.salary)
              FROM d_month_salary t1
             WHERE t1.salarymonth =
                         ((SUBSTR (t.salarymonth, 1, 4) - 1)
                      || SUBSTR (t.salarymonth, -2))) "同比",
           SUM (t.salary)
         / (SELECT SUM (t1.salary)
              FROM d_month_salary t1
             WHERE t1.salarymonth =
                      TO_CHAR (add_months(TO_DATE (t.salarymonth, 'yyyymm'),-1),
                               'yyyymm')) "环比"
    FROM d_month_salary t
GROUP BY t.salarymonth;
我的有啥bug啊?
关工 2013-08-02
  • 打赏
  • 举报
回复
修正脚本:

/* Formatted on 2013/08/02 15:22 (Formatter Plus v4.8.7) */

SELECT curmonth "月份", ((curmonth_sum - lastyear_sum) / lastyear_sum * 100) "同比",
       ((curmonth_sum - lastmonth_sum) / lastmonth_sum * 100) "环比"
  FROM (SELECT   t.salarymonth curmonth, SUM (t.salary) curmonth_sum,
                 (SELECT SUM (t1.salary)
                    FROM d_month_salary t1
                   WHERE t1.salarymonth =
                            (   (SUBSTR (t.salarymonth, 1, 4) - 1)
                             || SUBSTR (t.salarymonth, -2)
                            )) lastyear_sum,
                 (SELECT SUM (t1.salary)
                    FROM d_month_salary t1
                   WHERE t1.salarymonth =
                            TO_CHAR
                               (ADD_MONTHS (TO_DATE (t.salarymonth, 'yyyymm'),
                                            -1
                                           ),
                                'yyyymm'
                               )) lastmonth_sum
            FROM d_month_salary t
        GROUP BY t.salarymonth)
Drat殇 2013-08-02
  • 打赏
  • 举报
回复
谢谢你们, 我去消化下...
关工 2013-08-02
  • 打赏
  • 举报
回复
同比没数据是因为没有去年的数据;是和去年的同一个月份比较。 环比是这个月份和上个月份比较。 公式是你那个。可以再修正一下。
Drat殇 2013-08-02
  • 打赏
  • 举报
回复
贴错了 环比公式:(当月值-上月值)/上月值x100 = 增长率%
Drat殇 2013-08-02
  • 打赏
  • 举报
回复
谢谢回帖,不过上面的同比怎么没有数据呢? 下面的环比也不是我所期望的值哈... 环比公式:(当年值-上年值)/上年值x100 = 增长率% 以上一定有负值,可惜你得到的全都是正值
关工 2013-08-02
  • 打赏
  • 举报
回复
先搞清同比和环比的概念: 同比是今年和去年同一个月份比较;环比是今年这个月份和上个月份比较。 上面这个兄台写得有点BUG,我修正一下:

/* Formatted on 2013/08/02 15:00 (Formatter Plus v4.8.7) */
SELECT   t.salarymonth,
           SUM (t.salary)
         / (SELECT SUM (t1.salary)
              FROM d_month_salary t1
             WHERE t1.salarymonth =
                         ((SUBSTR (t.salarymonth, 1, 4) - 1)
                      || SUBSTR (t.salarymonth, -2))) "同比",
           SUM (t.salary)
         / (SELECT SUM (t1.salary)
              FROM d_month_salary t1
             WHERE t1.salarymonth =
                      TO_CHAR (add_months(TO_DATE (t.salarymonth, 'yyyymm'),-1),
                               'yyyymm')) "环比"
    FROM d_month_salary t
GROUP BY t.salarymonth;
u010412956 2013-08-02
  • 打赏
  • 举报
回复
select t.*, t.rowid from D_MONTH_SALARY t;

select t.salarymonth,
       sum(t.salary) / (select sum(t1.salary)
                          from D_MONTH_SALARY t1
                         where t1.salarymonth = (substr(t.salarymonth, 1, 4) - 1) ||
                               substr(t.salarymonth, -2)) "同比",
       sum(t.salary) /
       (select sum(t1.salary)
          from D_MONTH_SALARY t1
         where t1.salarymonth =
               to_char(to_date(t.salarymonth, 'yyyymm') - 1, 'yyyymm')) "环比"
  from D_MONTH_SALARY t
 group by t.salarymonth;

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧