Saldo

01/01/2008 - 22:39 por netzorro | Informe spam
Hola, espero puedan ayudarme,

tengo una tabla que lleva las entradas y salidas de un almacen. Estas son
las columnas principales.

producto, entrada, salida.

Quisiera lograr una query que me devolviera el saldo acumulado por producto,
es decir que al cambiar el producto el saldo acumulado vuevla a empezar, por
ejemplo:

Producto entrada salida saldo

Prod1 10 0 10
Prod1 5 0 15
Prod1 0 1 14
Prod2 20 0 20
etc

He buscado algunos ejemplos para el saldo pero nunca he encontrado el
agrupamiento por producto

muchas gracias
_______________
Diego

Preguntas similare

Leer las respuestas

#6 netzorro
08/01/2008 - 19:40 | Informe spam
El objetivo de transacciondate <= a.transacciondate
es el de obtener la suma acumulada de los saldos de las operaciones
anteriores a la actual
Sino me daria el de todas las operaciones de la tabla
Gracias
diego

"Carlos M. Calvelo" wrote in message
news:
Hola,

On 8 jan, 02:10, "netzorro" wrote:
Gracias,
encontre algo que puede ser la punta de lo que necesito

select debito,credito,saldo=(select sum(credito-debido) from #temp where
clave=a.clave and transacciondate <= a.transacciondate)
from #temp a
order by transacciondate



Es la columna 'clave' la clave primaria de la tabla como su nombre
parece indicar? Si es así lo que haces arriba es equivalente a:

select debito,credito,sum(credito-debito) as saldo
from #temp
order by transacciondate

En tu subconsulta entonces el "transacciondate <= a.transacciondate"
no pinta nada ya que si clave=a.clave entonces transacciondate
será igual a a.transacciondate.


Ahora me flataria agruparlo



Agrupar el qué? Por qué atributos quieres agrupar?

Hasta ahora lo que querías era poner por registro un saldo
cumulativo. El cálculo de este saldo cumulativo tendrá que estar
basado en que los registros aparezcan en cierto orden. Por eso yo
había propuesto la columna 'clave' (como clave primaria) para estar
seguros de que siempre podemos forzar el mismo orden.
La consulta que has puesto ahora no hace eso.

Pon aquí la estructura de la tabla y unos cuantos registros como
ejemplo. Si puede ser en código que podamos ejecutar (DDL).
Trata de explicar mejor lo que estás tratando de hacer y pon
también que resultados esperas a partir de esos datos ejemplo.

Es que así no nos vamos a entender. Pero si puedes explicar
mejor... estaré (estaremos!) encantados de ayudarte.

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
08/01/2008 - 20:51 | Informe spam
On 8 jan, 19:40, "netzorro" wrote:
El objetivo de transacciondate <= a.transacciondate
es el de obtener la suma acumulada de los saldos de las operaciones
anteriores a la actual
Sino me daria el de todas las operaciones de la tabla
Gracias
diego




Diego,

Es 'clave' la clave primaria?
Es decir, qué columna identifica a cada registro en la tabla?
O es tansacciondate la columa que es única? Es transacciondate
la clave primaria?

No nos estamos entendiendo!. No pones aquí la estructura
ni explicas que es lo que quieres agrupar.

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 netzorro
09/01/2008 - 21:21 | Informe spam
Es que es solo un ejemplo, no una tabla real
El transactiondate tendria la fecha de la trasaccion, por eso hay que buscar
las <= para que sumen el acumulado al saldo.
Igual ya he resuelto el problema mediante codigo en lugar de hacer todo en
sqlserver.
Muchas gracias por tu paciencia
Deigo

"Carlos M. Calvelo" wrote in message
news:
On 8 jan, 19:40, "netzorro" wrote:
El objetivo de transacciondate <= a.transacciondate
es el de obtener la suma acumulada de los saldos de las operaciones
anteriores a la actual
Sino me daria el de todas las operaciones de la tabla
Gracias
diego




Diego,

Es 'clave' la clave primaria?
Es decir, qué columna identifica a cada registro en la tabla?
O es tansacciondate la columa que es única? Es transacciondate
la clave primaria?

No nos estamos entendiendo!. No pones aquí la estructura
ni explicas que es lo que quieres agrupar.
Respuesta Responder a este mensaje
#9 Carlos M. Calvelo
09/01/2008 - 21:58 | Informe spam
On 9 jan, 21:21, "netzorro" wrote:
Es que es solo un ejemplo, no una tabla real
El transactiondate tendria la fecha de la trasaccion, por eso hay que buscar
las <= para que sumen el acumulado al saldo.
Igual ya he resuelto el problema mediante codigo en lugar de hacer todo en
sqlserver.
Muchas gracias por tu paciencia



Bueno Diego, un último intento.

Imagínate que tenemos esta tabla:

create table #temp (
transactiondate datetime not null,
debito money not null,
credito money not null
)

Y ahora hacemos esta consulta:

select a.transactiondate, a.debito, a.credito,
sum(b.credito) - sum(b.debito) as saldo
from #temp a join #temp b on a.transactiondate >= b.transactiondate
group by a.transactiondate, a.debito, a.credito
order by a.transactiondate

El problema con esto es que registros con la misma fecha de
transación te enseñaran todos el mismo saldo. Pero si tienes
una columna que es única para toda la tabla, digamos 'clave',
así:

create table #temp (
clave int not null primary key,
transactiondate datetime not null,
debito money not null,
credito money not null
)

Entonces puedes hacer esto:

select a.clave,a.transactiondate, a.debito, a.credito,
sum(b.credito) - sum(b.debito) as saldo
from #temp a join #temp b
on (a.transactiondate = b.transactiondate and a.clave >= b.clave)
or a.transactiondate > b.transactiondate
group by a.transactiondate, a.clave,a.debito, a.credito
order by a.transactiondate, a.clave

Después de haber creado la última tabla #temp de arriba,
con la columna 'clave', prueba las dos consultas con estos datos:

insert #temp values (1,'20080101',1,2)
insert #temp values (2,'20080102',2,3)
insert #temp values (3,'20080103',3,4)
insert #temp values (4,'20080103',4,5)
insert #temp values (5,'20080101',5,6)
insert #temp values (6,'20080101',6,7)

... y verás lo que quiero decir.

Saludos,
Carlos
Respuesta Responder a este mensaje
#10 netzorro
12/01/2008 - 06:43 | Informe spam
excelente
muchas gracias
diego

"Carlos M. Calvelo" wrote in message
news:
On 9 jan, 21:21, "netzorro" wrote:
Es que es solo un ejemplo, no una tabla real
El transactiondate tendria la fecha de la trasaccion, por eso hay que
buscar
las <= para que sumen el acumulado al saldo.
Igual ya he resuelto el problema mediante codigo en lugar de hacer todo en
sqlserver.
Muchas gracias por tu paciencia



Bueno Diego, un último intento.

Imagínate que tenemos esta tabla:

create table #temp (
transactiondate datetime not null,
debito money not null,
credito money not null
)

Y ahora hacemos esta consulta:

select a.transactiondate, a.debito, a.credito,
sum(b.credito) - sum(b.debito) as saldo
from #temp a join #temp b on a.transactiondate >= b.transactiondate
group by a.transactiondate, a.debito, a.credito
order by a.transactiondate

El problema con esto es que registros con la misma fecha de
transación te enseñaran todos el mismo saldo. Pero si tienes
una columna que es única para toda la tabla, digamos 'clave',
así:

create table #temp (
clave int not null primary key,
transactiondate datetime not null,
debito money not null,
credito money not null
)

Entonces puedes hacer esto:

select a.clave,a.transactiondate, a.debito, a.credito,
sum(b.credito) - sum(b.debito) as saldo
from #temp a join #temp b
on (a.transactiondate = b.transactiondate and a.clave >= b.clave)
or a.transactiondate > b.transactiondate
group by a.transactiondate, a.clave,a.debito, a.credito
order by a.transactiondate, a.clave

Después de haber creado la última tabla #temp de arriba,
con la columna 'clave', prueba las dos consultas con estos datos:

insert #temp values (1,'20080101',1,2)
insert #temp values (2,'20080102',2,3)
insert #temp values (3,'20080103',3,4)
insert #temp values (4,'20080103',4,5)
insert #temp values (5,'20080101',5,6)
insert #temp values (6,'20080101',6,7)

... y verás lo que quiero decir.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida