Conrado con esta consulta obtienes el resultado que deseas. Resalto el
uso de la ventana para realizar la suma acumulada de cada caso
Saludos
Julio
/select tipo1, tipo2,*sum(imp) over (order by id)* from (select id, imp
as tipo1, 0 as tipo2, imp from foo where tipo= 1 union select id, 0 as
tipo1, imp as tipo2, imp*-1 from foo where tipo= 2)Aux/
El 5/24/2012 7:24 AM, Conrado Blasetti escribió:
Gente, Buenos días.
Tengo una vista de movimientos debe/haber, facturas/pagos donde están
tengo importes y el tipo de movimiento de cada uno.
Creo que con funciones ventana se podría sacar el acumulado por
registro, pero no doy en la tecla.
Este es un ejemplo simplificado para realizar el select:
El campo tipo, es el tipo de movimiento que, cuando es 1, debería
sumar el importe, si es 2, debería restar.
drop table foo;
create table foo (
id serial not null,
tipo numeric(10) not null,
imp numeric(10,2),
CONSTRAINT foo_id PRIMARY KEY (id)
);
insert into foo (tipo, imp) values (1,30.5);
insert into foo (tipo, imp) values (1,20.25);
insert into foo (tipo, imp) values (2,30);
insert into foo (tipo, imp) values (1,75.3);
insert into foo (tipo, imp) values (1,75.3);
insert into foo (tipo, imp) values (2,100);
select * from foo;
1;1;30.50
2;1;20.25
3;2;30.00
4;1;75.30
5;1;75.30
6;2;100.00
La consulta debería mostrar al asi:
TIPO 1 TIPO 2 SALDO
30.5 0 30.5
20.25 0 50.75
0 30 20.75
75.3 0 96.05
75.3 0 171.35
0 100 75.35
La columna Saldo, sería el acumulado de la diferencia de la suma de
TIPO 1, menos TIPO2.
Bueno, esto creo que se puede hacer en una misma sentencia sql, pero
se me está complicando, me darán una mano para armarla?
Desde ya, gracias
Saludos,
Conrado
Usando Postgresql 9.0
<http://www.uci.cu/>
10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS
INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION
http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci