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

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

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.
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

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
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante