Página 1 de 1

Cálculo: consumir saldo usando Select/função analítica?

Enviado: Qui, 19 Dez 2019 3:24 pm
por Porva
Galera

é possível via Select, usando funções analíticas, fazer o cálculo conforme abaixo:

Selecionar tudo

Exportado (total) | Descarregado | Exportado | Saldo restante
-------------------------------------------------------------
               30 |           10 |        10 |             20
  	          30 |           15 |        15 |              5
	            30 |           10 |         5 |              0 *
	            30 |           10 |    	  0 |              0
	            30 |            5 |         0 |              0
-------------------------------------------------------------
                                   Total: 30
o Exportado (total) é um lançamento separado que é feito, e no JOIN ele repetirá para cada linha se necessário, daí desse valor eu quero ir consumindo o saldo linha a linha, não sei se consegui explicar bem.

Descarregado: lançamento gravado no banco

Exportado: Esse campo eu precisaria calcular

a ideia seria sempre pegar o saldo da linha anterior e exportar o que ainda resta, neste exemplo, na linha 3 o saldo todo é consumido.

Re: Cálculo: consumir saldo usando Select/função analítica?

Enviado: Qui, 19 Dez 2019 4:11 pm
por Porva
achei uma função analítica aqui que talvez me auxilie nos cálculos: "Analytic Function Oracle" "Sum() Over()"

fonte:

https://pt.stackoverflow.com/questions/ ... -no-oracle

https://oracle-base.com/articles/misc/s ... c-function

#fica a dica

Re: Cálculo: consumir saldo usando Select/função analítica?

Enviado: Qui, 19 Dez 2019 4:14 pm
por dr_gori
Sim, é possível.
Veja esse exemplo, digamos que essa é sua tabela:

Selecionar tudo

SQL> select deptno, hiredate quando, 10000 exportado, sal descarregado
  2  from emp
  3  where deptno=30
  4  order by deptno, hiredate;

DEPTNO QUANDO       EXPORTADO DESCARREGADO
------ ----------- ---------- ------------
    30 20-Feb-81        10000      1600.00
    30 22-Feb-81        10000      1250.00
    30 01-May-81        10000      2850.00
    30 08-Sep-81        10000      1500.00
    30 28-Sep-81        10000      1250.00
    30 03-Dec-81        10000       950.00

6 rows selected
Coloquei um campo a mais: EXPORTADO - SUM(sal), etc..

Selecionar tudo

SQL> select deptno, hiredate quando, 10000 exportado, sal descarregado
  2  , 10000 - SUM(sal) over (partition by 1 ORDER BY deptno,hiredate) saldo
  3  from emp
  4  where deptno=30
  5  order by deptno, hiredate;

DEPTNO QUANDO       EXPORTADO DESCARREGADO      SALDO
------ ----------- ---------- ------------ ----------
    30 20-Feb-81        10000      1600.00       8400
    30 22-Feb-81        10000      1250.00       7150
    30 01-May-81        10000      2850.00       4300
    30 08-Sep-81        10000      1500.00       2800
    30 28-Sep-81        10000      1250.00       1550
    30 03-Dec-81        10000       950.00        600

6 rows selected
Ta lá o saldo linha a linha. :D
Eu sempre consulto essa página aqui pra ver exatamente o que eu preciso:
https://glufke.net/oracle/download/funco ... TICAS.html