补齐不连续的月份问题,谢谢!

520NET 2011-08-24 03:23:25
表有两个字段
字段1(VARCHAR2):存储月份 字段2(NUMBER):存储值

字段1 字段2
201010 4
201102 7

我想补齐不连续的月,谢谢,结果如下:
字段1 字段2
201010 4
201011 0
201012 0
201101 0
201102 7
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2011-08-24
  • 打赏
  • 举报
回复

with t as(
select '201010' as smonth, 4 as val from dual
union all
select '201102' as smonth, 7 as val from dual
union all
select '201108' as smonth, 10 as val from dual
)
select mon 年月,
val 数值,
Decode(val,0,0,(val-lag_val)/val)*100 环比增长
from (
select a.mon,nvl(t.val,0) val,Lag(Nvl(t.val,0),1,Nvl(t.val,0))over(order by a.mon) lag_val from(
select to_char(add_months(m1,level-1),'yyyymm') mon from (
select min(to_date(smonth,'yyyymm')) m1,max(to_date(smonth,'yyyymm')) m2 from t
)
connect by level<=months_between(m2,m1)+1
) a
left join t on a.mon=t.smonth(+)
order by 1
)

年月 数值 环比增长
201010 4 0
201011 0 0
201012 0 0
201101 0 0
201102 7 100
201103 0 0
201104 0 0
201105 0 0
201106 0 0
201107 0 0
201108 10 100





520NET 2011-08-24
  • 打赏
  • 举报
回复
我想求月的环比增长率,

年月 数值
201010 4
201102 7

按月环比结果如下:环比增长=(本月数值-上月数值)/本月数值
年月 数值 环比增长
201010 4 0
201011 0 0
201012 0 0
201101 0 0
201102 7 100
注:年月为字符
求SQL,谢谢!
opps_zhou 2011-08-24
  • 打赏
  • 举报
回复

with t as
(
select '201010' as smonth, 4 as val from dual
union all
select '201102' as smonth, 7 as val from dual
union all
select '201108' as smonth, 10 as val from dual
)
select a.smonth, 0 as val
from (select to_char(add_months(to_date(smin,'yyyymm'), rownum),'yyyymm') as smonth
from (select min(smonth) as smin,
max(smonth) as smax
from t) t1
connect by rownum < months_between(to_date(t1.smax, 'yyyymm'), to_date(t1.smin, 'yyyymm'))) a
where smonth not in(select smonth from t)
order by smonth;
luoyoumou 2011-08-24
  • 打赏
  • 举报
回复
不明白你的意思!

-- 要生成连续月份很简单:用递归查询 connect by

17,086

社区成员

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

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