Seguimos con el Kardex

03/02/2005 - 16:34 por K | Informe spam
Hola otra vez a todos tengo esta pequeña consulta que arme gracias a la
ayuda

de Maxi...



SELECT COUNT(*) AS Numero, MovimientosCompletos.Movimiento

AS [Nº Movimiento], MovimientosCompletos.CodigoArticulo,

MovimientosCompletos.FechaMovimiento, MovimientosCompletos.Cantidad,

SUM(S.Cantidad) AS Saldo
FROM MovimientosCompletos INNER JOIN
(SELECT MovimientosCompletos.Movimiento,

MovimientosCompletos.FechaMovimiento,

MovimientosCompletos.CodigoArticulo,

MovimientosCompletos.Cantidad
FROM MovimientosCompletos) S ON
MovimientosCompletos.CodigoArticulo = S.CodigoArticulo AND
MovimientosCompletos.FechaMovimiento >= S.FechaMovimiento AND
MovimientosCompletos.Movimiento >= S.Movimiento
GROUP BY MovimientosCompletos.Movimiento,

MovimientosCompletos.FechaMovimiento,

MovimientosCompletos.CodigoArticulo, MovimientosCompletos.Cantidad



Movimientos Completos es una vista donde tengo UNIONES de consultas

separadas por el tipo de Movimiento si es Salida la Cantidad esta en
negativo

y cosas así, la consulta que esta arriba es casi perfecta si no fuera por
que me

devuelve algunos saldos que no son y es porque la numeración de los
movimientos

no concuerda pongo un pequeño ejemplo de los datos devueltos para que se
entienda mejor...



Nº Mov CodigoArticulo Fecha Cant. Saldo

9702678 TRMEBP50W 03 1998-03-31 00:00:00 3000 3000
9702720 TRMEBP50W 03 1998-04-03 00:00:00 -1 2999
9702724 TRMEBP50W 03 1998-04-03 00:00:00 -1 2998
9702734 TRMEBP50W 03 1998-04-03 00:00:00 -2 2996
9702738 TRMEBP50W 03 1998-04-06 00:00:00 -6 2990
9702740 TRMEBP50W 03 1998-04-06 00:00:00 -18 2972
9702744 TRMEBP50W 03 1998-04-06 00:00:00 -4 2968
9702751 TRMEBP50W 03 1998-04-07 00:00:00 -4 2964
9702753 TRMEBP50W 03 1998-04-07 00:00:00 -2 2962
9702769 TRMEBP50W 03 1998-04-07 00:00:00 1 2963
9702763 TRMEBP50W 03 1998-04-08 00:00:00 -2 2960
9702859 TRMEBP50W 03 1998-04-08 00:00:00 1 2962



Como ven todo va bien hasta los últimos 3 Movimientos la consulta saca por

el Orden de las Fechas y de los Numero de Movimiento por lo que de 2963 - 2

le pone 2960 porque no toma en cuenta el Movimiento anterior porque a pesar

de que en su fecha es menor el Nº de Mov es mayor.. pero como se ve
después

se ordena el saldo...



No se como solucionar este problema trate de generar un correlativo

para trabajar con ese campo pero no he podido...



Espero haberme explicado solo me faltaría eso para poder terminar este
kardex



Muchas Gracias por su ayuda

Preguntas similare

Leer las respuestas

#11 K
04/02/2005 - 01:47 | Informe spam
Gracias eso es lo que yo tambien pienso que es lo unico que se puede hacer
no veo otra salida... trate de hacer eso del Identity pero no me salio
cuando
lo intente.

Como tu pones es un solucion feaojala aparesca ese genio y de una
solucion
mas practica...

Gracias por todo Maxi..


"MAXI" escribió en el mensaje
news:
Hola, pensando nuevamente ahora me doy cuenta lo que me dices.

mmm, se me ocurre una solucion fea pero deberia funcionar.

1) te creas una tabla temporal con la estructura de movimientos con un


campo
identity
2) insertamos en esa tabla temporal el reultado del select de movimientos
ordenado por fecha primero y luego por movimiento
3) hacemos la query sobre la tabla temporal usando el identity (numerador)

Si no te das cuenta como armarlo ye genero la instruccion, otra opcion no


se
me ocurre :( quizas algun genio de este news tenga otra alternativa



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"MAXI" escribió en el mensaje
news:
> Hola, mirate este ejemplo:
>
> => >
> create table #movimientosCompletos (movimiento int identity,valor float,
> fecha datetime,articulo int)
>
>
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (100,getdate(),1)
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (-50,getdate()-1,1)
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (200,getdate()+1,1)
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (200,getdate(),1)
>
>
>
> SELECT m.Movimiento,M.Articulo,
> m.Fecha,M.valor,SUM(S.valor) AS Saldo,count(*) AS CUENTA
> FROM #MovimientosCompletos M INNER JOIN
> (SELECT Movimiento,Fecha,
> Articulo,valor FROM #MovimientosCompletos) S ON
> M.Articulo = S.Articulo AND
> M.fecha >= S.Fecha -- and
> GROUP BY M.Movimiento,
> M.Fecha,M.articulo, M.valor
> order by m.fecha
>
>
> > >
> funciona bien, el tema me parece que lo tenes como estas guardando las
> fechas, estas las estas guardando con las horas? porque si solo guardas


la
> fecha se te complicara mucho :(
>
> Proba y contame
>
>
>


Respuesta Responder a este mensaje
#12 MAXI
04/02/2005 - 02:46 | Informe spam
Hola, es una solucion fea solo por el uso de la temp, pero de todas maneras
es mucho mas eficiente que armar un cursor para poder resolver dicho tema
:-)



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"" escribió en el mensaje
news:%
Gracias eso es lo que yo tambien pienso que es lo unico que se puede hacer
no veo otra salida... trate de hacer eso del Identity pero no me salio
cuando
lo intente.

Como tu pones es un solucion feaojala aparesca ese genio y de una
solucion
mas practica...

Gracias por todo Maxi..


"MAXI" escribió en el mensaje
news:
Hola, pensando nuevamente ahora me doy cuenta lo que me dices.

mmm, se me ocurre una solucion fea pero deberia funcionar.

1) te creas una tabla temporal con la estructura de movimientos con un


campo
identity
2) insertamos en esa tabla temporal el reultado del select de movimientos
ordenado por fecha primero y luego por movimiento
3) hacemos la query sobre la tabla temporal usando el identity
(numerador)

Si no te das cuenta como armarlo ye genero la instruccion, otra opcion no


se
me ocurre :( quizas algun genio de este news tenga otra alternativa



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"MAXI" escribió en el mensaje
news:
> Hola, mirate este ejemplo:
>
> =>> >
> create table #movimientosCompletos (movimiento int identity,valor
> float,
> fecha datetime,articulo int)
>
>
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (100,getdate(),1)
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (-50,getdate()-1,1)
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (200,getdate()+1,1)
> insert into #movimientosCompletos (valor,fecha,articulo) values
> (200,getdate(),1)
>
>
>
> SELECT m.Movimiento,M.Articulo,
> m.Fecha,M.valor,SUM(S.valor) AS Saldo,count(*) AS CUENTA
> FROM #MovimientosCompletos M INNER JOIN
> (SELECT Movimiento,Fecha,
> Articulo,valor FROM #MovimientosCompletos) S ON
> M.Articulo = S.Articulo AND
> M.fecha >= S.Fecha -- and
> GROUP BY M.Movimiento,
> M.Fecha,M.articulo, M.valor
> order by m.fecha
>
>
> >> >
> funciona bien, el tema me parece que lo tenes como estas guardando las
> fechas, estas las estas guardando con las horas? porque si solo guardas


la
> fecha se te complicara mucho :(
>
> Proba y contame
>
>
>






Respuesta Responder a este mensaje
#13 Ricardo Uribe
04/02/2005 - 11:26 | Informe spam
Bueno entonces voy a tratar ...cualquier cosa te pido un poco
de ayuda..Gracias otra vez


"MAXI" escribió en el mensaje
news:
Hola, es una solucion fea solo por el uso de la temp, pero de todas


maneras
es mucho mas eficiente que armar un cursor para poder resolver dicho tema
:-)



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"" escribió en el mensaje
news:%
> Gracias eso es lo que yo tambien pienso que es lo unico que se puede


hacer
> no veo otra salida... trate de hacer eso del Identity pero no me


salio
> cuando
> lo intente.
>
> Como tu pones es un solucion feaojala aparesca ese genio y de una
> solucion
> mas practica...
>
> Gracias por todo Maxi..
>
>
> "MAXI" escribió en el mensaje
> news:
>> Hola, pensando nuevamente ahora me doy cuenta lo que me dices.
>>
>> mmm, se me ocurre una solucion fea pero deberia funcionar.
>>
>> 1) te creas una tabla temporal con la estructura de movimientos con un
> campo
>> identity
>> 2) insertamos en esa tabla temporal el reultado del select de


movimientos
>> ordenado por fecha primero y luego por movimiento
>> 3) hacemos la query sobre la tabla temporal usando el identity
>> (numerador)
>>
>> Si no te das cuenta como armarlo ye genero la instruccion, otra opcion


no
> se
>> me ocurre :( quizas algun genio de este news tenga otra alternativa
>>
>>
>>
>> Maxi
>>
>> Buenos Aires - Argentina
>> Desarrollador .NET 3 Estrellas
>> Microsoft User Group (MUG)
>>
>> MSN:
>> "MAXI" escribió en el mensaje
>> news:
>> > Hola, mirate este ejemplo:
>> >
>> > => >> >
>> > create table #movimientosCompletos (movimiento int identity,valor
>> > float,
>> > fecha datetime,articulo int)
>> >
>> >
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (100,getdate(),1)
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (-50,getdate()-1,1)
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (200,getdate()+1,1)
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (200,getdate(),1)
>> >
>> >
>> >
>> > SELECT m.Movimiento,M.Articulo,
>> > m.Fecha,M.valor,SUM(S.valor) AS Saldo,count(*) AS CUENTA
>> > FROM #MovimientosCompletos M INNER JOIN
>> > (SELECT Movimiento,Fecha,
>> > Articulo,valor FROM #MovimientosCompletos) S ON
>> > M.Articulo = S.Articulo AND
>> > M.fecha >= S.Fecha -- and
>> > GROUP BY M.Movimiento,
>> > M.Fecha,M.articulo, M.valor
>> > order by m.fecha
>> >
>> >
>> > > >> >
>> > funciona bien, el tema me parece que lo tenes como estas guardando


las
>> > fechas, estas las estas guardando con las horas? porque si solo


guardas
> la
>> > fecha se te complicara mucho :(
>> >
>> > Proba y contame
>> >
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#14 Maxi
05/02/2005 - 15:53 | Informe spam
Ok, estare sioempre aqui para cualquier cosa :-)


"Ricardo Uribe" escribió en el mensaje
news:
Bueno entonces voy a tratar ...cualquier cosa te pido un poco
de ayuda..Gracias otra vez


"MAXI" escribió en el mensaje
news:
Hola, es una solucion fea solo por el uso de la temp, pero de todas


maneras
es mucho mas eficiente que armar un cursor para poder resolver dicho tema
:-)



Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:
"" escribió en el mensaje
news:%
> Gracias eso es lo que yo tambien pienso que es lo unico que se puede


hacer
> no veo otra salida... trate de hacer eso del Identity pero no me


salio
> cuando
> lo intente.
>
> Como tu pones es un solucion feaojala aparesca ese genio y de una
> solucion
> mas practica...
>
> Gracias por todo Maxi..
>
>
> "MAXI" escribió en el mensaje
> news:
>> Hola, pensando nuevamente ahora me doy cuenta lo que me dices.
>>
>> mmm, se me ocurre una solucion fea pero deberia funcionar.
>>
>> 1) te creas una tabla temporal con la estructura de movimientos con un
> campo
>> identity
>> 2) insertamos en esa tabla temporal el reultado del select de


movimientos
>> ordenado por fecha primero y luego por movimiento
>> 3) hacemos la query sobre la tabla temporal usando el identity
>> (numerador)
>>
>> Si no te das cuenta como armarlo ye genero la instruccion, otra opcion


no
> se
>> me ocurre :( quizas algun genio de este news tenga otra alternativa
>>
>>
>>
>> Maxi
>>
>> Buenos Aires - Argentina
>> Desarrollador .NET 3 Estrellas
>> Microsoft User Group (MUG)
>>
>> MSN:
>> "MAXI" escribió en el mensaje
>> news:
>> > Hola, mirate este ejemplo:
>> >
>> > =>> >> >
>> > create table #movimientosCompletos (movimiento int identity,valor
>> > float,
>> > fecha datetime,articulo int)
>> >
>> >
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (100,getdate(),1)
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (-50,getdate()-1,1)
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (200,getdate()+1,1)
>> > insert into #movimientosCompletos (valor,fecha,articulo) values
>> > (200,getdate(),1)
>> >
>> >
>> >
>> > SELECT m.Movimiento,M.Articulo,
>> > m.Fecha,M.valor,SUM(S.valor) AS Saldo,count(*) AS CUENTA
>> > FROM #MovimientosCompletos M INNER JOIN
>> > (SELECT Movimiento,Fecha,
>> > Articulo,valor FROM #MovimientosCompletos) S ON
>> > M.Articulo = S.Articulo AND
>> > M.fecha >= S.Fecha -- and
>> > GROUP BY M.Movimiento,
>> > M.Fecha,M.articulo, M.valor
>> > order by m.fecha
>> >
>> >
>> > >> >> >
>> > funciona bien, el tema me parece que lo tenes como estas guardando


las
>> > fechas, estas las estas guardando con las horas? porque si solo


guardas
> la
>> > fecha se te complicara mucho :(
>> >
>> > Proba y contame
>> >
>> >
>> >
>>
>>
>
>






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