oracle11g - Oracle Incremental Percent -


i trying make query return this:

<pre>  codigo_vendedor        anio		monto		%inc  100			2014		23			  100			2015		26.50		15.22%  200			2014		20		  200			2015		575		2775.00%  <pre>

this incremental percentaje, problem having calculate %inc column, current query:

with ventas_anuales ( select      c.codigo_vendedor,      sum(d.precio*d.cantidad) monto,      extract( year f.fecha) anio detalle d inner join      factura f on f.serie = d.serie , f.numero = d.numero inner join      clientes2 c on c.codigo_cliente = f.codigo_cliente group       c.codigo_vendedor,     extract( year f.fecha) order c.codigo_vendedor, extract( year f.fecha) ) select  va.codigo_vendedor,  va.anio,  to_char(va.monto,'9999.99') monto, concat(to_char((va.monto*100/va.monto)-100,'9999.99'),'%') "%inc"  ventas_anuales va; 

and obviosly can columns, except incremental percentaje year:

but not know how calculate last column.

thank in advance.

regards

try use analytic function last monto in same row current monto :

lag(monto) on (partition codigo_vendedor order anio) p_monto 

and put in additional outer select :

select          codigo_vendedor        ,anio        ,monto        ,lag(va.monto) on (partition va.codigo_vendedor order va.anio) p_monto ... 

in main select add following expression , alias :

select         ,va.codigo_vendedor        ,va.anio        ,to_char(va.monto,'9999.99') monto        ,((va.monto-va.p_monto)/va.p_monto)*100 || '%' "%inc" ... 

full query :

 ventas_anuales     (         select                 codigo_vendedor               ,anio               ,monto               ,lag(va.monto) on (partition va.codigo_vendedor order va.anio) p_monto         ( select  c.codigo_vendedor                       ,sum(d.precio*d.cantidad) monto                        ,extract( year f.fecha) anio                detalle d                inner join                    factura f on f.serie = d.serie , f.numero = d.numero                inner join                    clientes2 c on c.codigo_cliente = f.codigo_cliente                group                     c.codigo_vendedor,                   extract( year f.fecha)              )     )     select            ,va.codigo_vendedor           ,va.anio           ,to_char(va.monto,'9999.99') monto           ,((va.monto-va.p_monto)/va.p_monto)*100  || '%' "%inc"     ventas_anuales va     order va.codigo_vendedor, va.anio; 

Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -