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

#1 Carlos M. Calvelo
02/01/2008 - 16:43 | Informe spam
Hola Diego,

On 1 jan, 22:39, "netzorro" wrote:
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




Mira este ejemplo:

declare @T table (clave int not null primary key,
producto char(10),
entrada int,
salida int)

insert @T values (2,'Prod1',10,0)
insert @T values (3,'Prod1',5,0)
insert @T values (4,'Prod1',0,1)
insert @T values (1,'Prod2',20,0)

select a.producto, a.entrada, a.salida,
sum(b.entrada) - sum(b.salida) as saldo
from @T a inner join @T b
on a.producto = b.producto and a.clave >= b.clave
group by a.clave, a.producto, a.entrada, a.salida
order by a.producto, a.clave


He añadido la columna 'clave' para forzar un orden total.
Te advierto además que si tu tabla tiene muchos
registros este método va a ser muuuuuuy leeeeentoooooo.

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 netzorro
03/01/2008 - 03:50 | Informe spam
Muchisimas gracias por tomarte el tiempo de escribir esto
Ha sido de gran ayuda
Pense que habia alguna manera de escribir esto en una sola query pero veo
que parece que no
Hare una stored proc siguiendo tu ayuda
Muchas gracias
Diego

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

On 1 jan, 22:39, "netzorro" wrote:
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




Mira este ejemplo:

declare @T table (clave int not null primary key,
producto char(10),
entrada int,
salida int)

insert @T values (2,'Prod1',10,0)
insert @T values (3,'Prod1',5,0)
insert @T values (4,'Prod1',0,1)
insert @T values (1,'Prod2',20,0)

select a.producto, a.entrada, a.salida,
sum(b.entrada) - sum(b.salida) as saldo
from @T a inner join @T b
on a.producto = b.producto and a.clave >= b.clave
group by a.clave, a.producto, a.entrada, a.salida
order by a.producto, a.clave


He añadido la columna 'clave' para forzar un orden total.
Te advierto además que si tu tabla tiene muchos
registros este método va a ser muuuuuuy leeeeentoooooo.

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
03/01/2008 - 12:02 | Informe spam
On 3 jan, 03:50, "netzorro" wrote:
Muchisimas gracias por tomarte el tiempo de escribir esto
Ha sido de gran ayuda
Pense que habia alguna manera de escribir esto en una sola query pero veo
que parece que no
Hare una stored proc siguiendo tu ayuda




No entiendo tu reacción.
Claro que se puede escribir en una consulta, como ya he expuesto.
El declare @T ... y los insert ... son solo por poner una tabla
ejemplo. Pero en la consulta que sigue solo tienes que cambiar
@T por tu tabla y la columna 'clave' por la clave primaria de
la tabla.

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 netzorro
08/01/2008 - 02:10 | Informe spam
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

Ahora me flataria agruparlo
gracias


"Carlos M. Calvelo" wrote in message
news:
On 3 jan, 03:50, "netzorro" wrote:
Muchisimas gracias por tomarte el tiempo de escribir esto
Ha sido de gran ayuda
Pense que habia alguna manera de escribir esto en una sola query pero veo
que parece que no
Hare una stored proc siguiendo tu ayuda




No entiendo tu reacción.
Claro que se puede escribir en una consulta, como ya he expuesto.
El declare @T ... y los insert ... son solo por poner una tabla
ejemplo. Pero en la consulta que sigue solo tienes que cambiar
@T por tu tabla y la columna 'clave' por la clave primaria de
la tabla.

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
08/01/2008 - 17:09 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida