Calcular acumulados con T-SQL

08/04/2004 - 17:51 por Matín López | Informe spam
¿Alguien sabes como puedo resolver esto SIN utilizar cursores?

Tengo la siguiente tabla:

Cliente Monto
A 100
B 50
C 25
D 10

Necesito devolver una columna adicional con los acumulados del monto, de
esta manera:

Cliente Monto Acumulado
A 100 100
B 50 150
C 25 175
D 10 185


Gracias.

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
08/04/2004 - 19:38 | Informe spam
Hola, suponiendo que no hay dos clientes iguales aca te mando el ejemplo:

CREATE TABLE #PEPE (ID CHAR(30), MONTO INT)

INSERT INTO #PEPE VALUES('A','100')
INSERT INTO #PEPE VALUES('B','50')
INSERT INTO #PEPE VALUES('C','25')
INSERT INTO #PEPE VALUES('D','10')

SELECT id, monto,
(SELECT sum(monto) FROM #pepe e2 WHERE e2.id <= e.id) AS acumulado
FROM #pepe e
ORDER BY id


Bye


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Matín López" escribió en el mensaje
news:
Mostrar la cita
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.618 / Virus Database: 397 - Release Date: 09/03/2004
#2 Martín López
08/04/2004 - 21:27 | Informe spam
Este caso funciona si los id de clientes estan en orden alfabetico, en el
caso que tengo que resolver están ordenados por monto. Te paso un ejemplo:

Cliente Monto
D 100
B 50
C 25
A 10

Resultado:

Cliente Monto Acumulado
D 100 100
B 50 150
C 25 175
A 10 185

Muchas gracias.

"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:#
Mostrar la cita
#3 Maximiliano D. A.
08/04/2004 - 21:34 | Informe spam
El tema es que si un monto se repite no te funcionara bien, si los montos
son distintos entonces no hay problema solo debes cambiar la forma que te
pase.

Bye


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Martín López" escribió en el mensaje
news:%
Mostrar la cita
ejemplo:
Mostrar la cita
de
Mostrar la cita
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.618 / Virus Database: 397 - Release Date: 09/03/2004
#4 Martín López
08/04/2004 - 21:51 | Informe spam
Hice el cambio que me dijiste ("e2.id <= e.id" por "e2.monto >= e.monto") y
funciona bastante bien.
El único problema que tengo ahora es que puedo llegar a tener montos que se
repiten.
Si sabés alguna forma de solucionar esto, por favor avisame.

Saludos.

"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:#
Mostrar la cita
el
Mostrar la cita
ejemplo:
Mostrar la cita
el
Mostrar la cita
monto,
Mostrar la cita
#5 Maximiliano D. A.
08/04/2004 - 22:15 | Informe spam
hola, debes buscar un orden, si es asi como decis vos podrias generar un
campo indentity que indique el orden, entonces si la tabla la ordenas por
monto luego ese podria tener el identity, es lo unico que se me ocurre ahora
:-(


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Martín López" escribió en el mensaje
news:
Mostrar la cita
y
Mostrar la cita
se
Mostrar la cita
montos
Mostrar la cita
te
Mostrar la cita
en
Mostrar la cita
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.618 / Virus Database: 397 - Release Date: 09/03/2004
Ads by Google
Search Busqueda sugerida