[RESOLVIDO] Como fazer essa query no SQLSERVER?

8 respostas
J

Pessoal, tenho uma tabela e quero obter o valor acumulado mes a mes, conforme abaixo:

codX codY dtref VALOR ACUMULADO 1234 987 2012-01-01 200056,88 200056,88 1234 987 2012-02-01 125160 200056,88+[telefone removido] 987 2012-03-01 68089 200056,88+125160+68089 1234 987 2012-04-01 0 0 1234 987 2012-05-01 0 0 1234 987 2012-06-01 0 0 1234 987 2012-07-01 0 0 1234 987 2012-08-01 0 0 1234 987 2012-09-01 0 0 1234 987 2012-10-01 0 0 1234 987 2012-11-01 0 0 1234 987 2012-12-01 0 0
Ou seja, a coluna ACUMULADO deverá trazer o VALOR do mês anterior somado ao
VALOR do mês atual.

Alguém pode me ajudar ?

8 Respostas

H

Faz um select, utilizando group by nos campos.
E no campo que você quer o total, utilize o SUM(campo)

R

SELECT CODX, CODY, DTREF, SUM(VALOR) AS ACUMULADO FROM TABELA GROUP BY CODX, CODY, DTREF

J

jakefrog:
Faz um select, utilizando group by nos campos.
E no campo que você quer o total, utilize o SUM(campo)

Vc quer dizer assim:

select codX,
codY,
DtRef,
SUM(Valor) as ACUMULADO
from myTable
group by codX, codY, DtRef

?

Se foi isso q vc quis dizer eu já havia tentado e não é isso o que preciso:

codX codY dtref fat 4207 129 2012-01-01 200056,88 4207 129 2012-02-01 [telefone removido] 129 2012-03-01 68089 4207 129 2012-04-01 0 4207 129 2012-05-01 0 4207 129 2012-06-01 0 4207 129 2012-07-01 0 4207 129 2012-08-01 0 4207 129 2012-09-01 0 4207 129 2012-10-01 0 4207 129 2012-11-01 0 4207 129 2012-12-01 0

Note que o valor não ACUMULA.

J

Não é isso. Assim não ACUMULA. Veja no meu post replicado logo acima.

R

é por causa da data… vc pode agrupar a data por mes, ano ou pegar a primeira…

exemplo:

select codX,
codY,
max(DtRef),
SUM(Valor) as ACUMULADO
from myTable
group by codX, codY, DtRef

J

ricardo.ivan:
é por causa da data… vc pode agrupar a data por mes, ano ou pegar a primeira…

exemplo:

select codX,
codY,
max(DtRef),
SUM(Valor) as ACUMULADO
from myTable
group by codX, codY, DtRef

Mas eu quero acumular todos os meses. Por exemplo:

DATA valor acumulado
jan 10 10+0=10
fev 20 20+10=30
mar 30 30+20+10=60
abr 2 2+30+20+10=62
mai 0 0+2+30+20+10=62
jun 10 10+0+2+30+20+10=72
.
dez 0 (soma tudo desde jan, inclusive o valor em nov)

Lembrando que quero manter o codX e codY, que são minha PK.

P

select t1.codX, t1.codY, t1.dtref, t1.valor, (SELECT SUM(t2.valor) FROM tabela t2 WHERE t1.codX=t2.codX and t1.codY=t2.codY AND t2.dtref BETWEEN '2012-01-01' AND t1.dtref) as acumulado FROM tabela t1

J

pmlm:
select t1.codX, t1.codY, t1.dtref, t1.valor, (SELECT SUM(t2.valor) FROM tabela t2 WHERE t1.codX=t2.codX and t1.codY=t2.codY AND t2.dtref BETWEEN '2012-01-01' AND t1.dtref) as acumulado FROM tabela t1

Colega, MUITO OBRIGADO !

Você não imagina como isso me ajudou.
Se algum dia você vier ao Brasil, eu te pago uma cerveja !

Deus te abençoe.

Um abraço.

Criado 14 de março de 2012
Ultima resposta 15 de mar. de 2012
Respostas 8
Participantes 4