Varios registros em funcao

Oracle

22/03/2005

PessoALL, tentarei ser claro. Tenho a seguinte tabela:
TB_AAA
COD --- METRICA --- VL
1 80 1000
1 80 500
2 80 5000
1 78 2000
2 78 3000
2 78 2500

Preciso criar uma função que me retorne, para cada metrica e codigo, a soma de seus valores e depois faca a diferenca entre os valores da metrica 80 com a 78, que tenham o mesmo codigo.

exemplo:
COD 1: VL (1000+500)/2000
COD 2: VL (5000)/(5500)

Ou seja, preciso de uma função que leia todos os registros da tabela, faca a soma agrupando por codigo e metrica, e depois faca a diferençao entre as duas metricas.

Alguem poderia me ajudar?!?


Fvilela

Fvilela

Curtidas 0

Respostas

Motta

Motta

22/03/2005

:(
não entendi ...


GOSTEI 0
Fvilela

Fvilela

22/03/2005

perdao, tentarei ser um pouco mais claro ...

...
suponha que tenho uma tabela com os seguintes registros como mostrado abaixo:
COD --- METRICA --- VL
1 80 1000
1 80 500
2 80 5000
1 78 2000
2 78 3000
2 78 2500

Se fizermos uma query que faca a soma e o agrupamento desses dados, teremos o seguinte:
select cod, metrica, sum(vl) from tb_aaa
group by cod,metrica

COD METRICA VL
1 80 1500
2 80 5000
1 78 2000
2 78 5500

Apos eu ter isso, tenho que pegar os registros que tenham o mesmo codigo e dividir o valor daquele codigo com a metrica 80 pelo valor da metrica 78.

Pegar o registro 1 - 80 - 1500 e dividir pelo registro 1 - 78 - 2000
gerando assim o resultado 1500/2000

pegar o registro 2 - 80 - 5000 e dividir pelo registro 2 - 78 - 5500
gerando assim o resultado 5000/5500

entendeu ?? eu preciso do retorno desse valor, da divisao das metricas 80 por 78, que possuam o mesmo codigo.


GOSTEI 0
Motta

Motta

22/03/2005

algo assim ....


function (pcod in number) return number is
 vl80 number;
 vl78 number
begin
  select vl
  into vl80
  from tabela
  where cod = pcod
  and metrica = 80;
  select vl
  into vl80
  from tabela
  where cod = pcod
  and metrica = 78;
  return (vl78/vl80);
end;




GOSTEI 0
Fvilela

Fvilela

22/03/2005

Sim .. so com uma pequena observancia ... sao vaarios codigos, precisava de um jeito que comparasse o codigo mas nao passando como parametro.


GOSTEI 0
Motta

Motta

22/03/2005

sim mas a relacao e de um codigo , nao ?

a function e recursiva ..

select codigo,razao(codigo)
from produto
where ....


onde razao seria a funcion

mas 80 e 78 sao fixos ?


GOSTEI 0
Fvilela

Fvilela

22/03/2005

sim mas a relacao e de um codigo , nao ? a function e recursiva .. select codigo,razao(codigo) from produto where .... onde razao seria a funcion mas 80 e 78 sao fixos ?


Sim, sao. Realmente funcionou como esperava.

Obrigadao pela ajuda Motta, no que precisar tamos ai!!!


GOSTEI 0
POSTAR