小妹我遇到一个棘手的问题,在使用lag函数计算年增长率时,去年的数据是空,也就是没有销售,前年是有数的,lag在计算的时候,会用前年的数来计算,结果当然是错误的,这个问题如何解决?
举例:
Prod Year Sales
A 2006 100
A 2008 200
在计算A产品2008年的增长率时,用的是2006年的数,因为2007年A产品的Sales为0,数据库中没有2007年的记录,这个问题怎么解决?
先谢谢大家了!
举例:
Prod Year Sales
A 2006 100
A 2008 200
在计算A产品2008年的增长率时,用的是2006年的数,因为2007年A产品的Sales为0,数据库中没有2007年的记录,这个问题怎么解决?
先谢谢大家了!
解决方案 »
- 为什么v_file:=utl_file.fopen(utlfile,file_name,'r');老是报错啊 求教高手
- 分页过程---要求:输入表名,每页记录数,当前页码,返回总记录数,总页数与结果集****球高手帮忙解决哈问题
- Drop partition与Truncate的区别?
- 关于数据查询连接数问题
- 如何自动生成编号字段?
- 求一个查询语句,关于生日提醒。
- 請問oracle會不會知道我在用他們的軟件?
- 如何查看数据库文件已经用多少空间,剩下多少空间?如何查看一个表格占用多少空间?
- **哪里有下载oracle的安装文件的?**
- 远程服务器的oracle在一段时间不连接,在连接后会产生异常,
- 字符集US7ASCII导出的数据,迁移到字符集ZHS16GBK的数据库中
- ORACLE新增列的效率问题
select prod,year,null from tab where year not in ...用这个表去就行了
select to_char(add_months(to_date('2006','yyyy'),12*rownum),'yyyy')
from dual
connect by rownum < 2008-2006把他作为一个子表,和你的外观连。然后对关联后的表进行lag的统计
from (select t2.startYear + rownum - 1 year
from (select max(year)-min(year)+1 num, min(year) startYear from t1) t2,
all_objects
where rownum <= t2.num) t3,
t1 t4
where t3.year = t4.year(+);假设这个表的名字是T1
若原表为A
select prod,year,sales,sales/lag(sales)over(order by year)-1 growth from(
select prod,year,sales from a
union
select 'A',year,null from b where year between(1990,2009) and year not in
(select year from a))
最后一行改成
select year fom a where sales is not null
select prod, year,case when (lag(year) over (order by year))= year-1 then (sales/lag(sales) over (order by year)-1)
else null
end as Growth_Rate
from table1
尤其是 wildwave 和 majy