como fazer soma recursiva (subtotal)

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Hernani
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 01 Fev 2008 10:41 am
Localização: PR

Não consegui escrever qual o problema, mas fiz um exemplo.
Estou precisando criar a coluna 'Soma' no select.

Valor Soma
10 10
15 25
20 45
5 50
22 72
diegopedrao
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 164
Registrado em: Sex, 22 Ago 2008 12:28 pm
Localização: SP

cara,

Pelo que entendi você terá que fazer o seguinte:

Criar uma variavel chamada SumAnt onde você vai guardar o valor anterior ai você faz SumAtual + SumAnt.

Você faz isso com cursor dando fetch.

Entendeu?

Att,

Diego Monteiro
Hernani
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 01 Fev 2008 10:41 am
Localização: PR

Entendi, obrigado.
Hernani
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 01 Fev 2008 10:41 am
Localização: PR

Selecionar tudo

SET @a=0;
SELECT valor, @a:=@a + valor AS soma FROM tabela;
Assim?
Tem outra forma de fazer isso?
marcio.adao
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Sex, 18 Mai 2007 11:52 am
Localização: Descalvado

Olá Hernani, tenta fazer assim:

Selecionar tudo

SELECT codigo,valor, SUM(valor)
OVER(ORDER BY codigo ROWS UNBOUNDED PRECEDING) soma
FROM tabela
ORDER BY codigo; 
Abraço,
Márcio.
marcio.adao
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Sex, 18 Mai 2007 11:52 am
Localização: Descalvado

Só para completar: se você não precisar do código (ou não tiver) da certo fazer assim:

Selecionar tudo

SELECT valor, SUM(valor) 
OVER(ORDER BY rownum ROWS UNBOUNDED PRECEDING) soma 
FROM tabela; 
Sds
Hernani
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 01 Fev 2008 10:41 am
Localização: PR

Desculpe aqui não deu certo, esqueci de falar que meu banco não é oracle.
Será que tem outra opção?
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

É cara, se teu banco não é oracle dae a opção postada pelo marcio não vai funcionar.

Qual é o banco q tu ta trablhando ??? deve ter algo similar.

Pesquisa por funções analitcas no google para o banco q tu ta trabalhado.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Se tu não conseguir montar isto em sql dae vai ter que partir pra programação em pl msmo.
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP
Eduardo Gomes

não sei se vai funcionar com o seu banco, segue código:

Selecionar tudo

SELECT CAMPO2_NM mês

     , SUM(CAMPO1_NM) TOT_mês

     , SUM(SUM(CAMPO1_NM)) OVER(ORDER BY CAMPO2_NM) TOT_ACUMULADO

FROM R_TESTE_EGSILVA  

WHERE CAMPO3_NM = 2002

GROUP BY CAMPO2_NM;   
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 26 visitantes