Cambiar SubConsulta a relacion Left Outer Join

02/04/2008 - 18:57 por Antonio Ortiz | Informe spam
Agradeceria me ayudaran para cambiar esta consulta con una subconsulta de la
forma Left Outer Join, pues necesito obtener mas de 1 columna de la tabla
TbaKardex y de esta manera no me es posible, a menos que repita la consulta
para cada columna.

SELECT IDProducto, Codigo, Descripcion,
ISNULL(SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC).0) AS ExistenciaFinal
FROM TbaProducto


gracias de antemano,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
03/04/2008 - 02:07 | Informe spam
Hola, sin saber como son las tablas, los datos y que esperas como resultado
se me hace por lo menos a mi muy dificil ayudarte!

Pasame la estructura de las tablas, ejemplos de datos y que buscas obtener


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:#
Agradeceria me ayudaran para cambiar esta consulta con una subconsulta de
la forma Left Outer Join, pues necesito obtener mas de 1 columna de la
tabla TbaKardex y de esta manera no me es posible, a menos que repita la
consulta para cada columna.

SELECT IDProducto, Codigo, Descripcion,
ISNULL(SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC).0) AS ExistenciaFinal
FROM TbaProducto


gracias de antemano,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com




Respuesta Responder a este mensaje
#2 Antonio Ortiz
03/04/2008 - 02:48 | Informe spam
ok, va mas informacion

Tabla: TbaKardex
IDKardex
Fecha {Contiene Fecha y hora
IDProducto
ExistenciaInicial
Cantidad
ExistenciaFinal

Tabla: TbaProducto
IDProducto
Codigo
Descripcion


-> La tabla TbaKardex contiene un registro por cada movimiento que afecta el
inventario, como puede ser: Compra, Venta, Entrada, Salida, Traspaso, lo
unico que necesito es que me diga el inventario que habia de cada producto a
una fecha (al final del dia). Si el producto no tuvo movimientos en la fecha
seleccionada, se toma existencia final del movimiento anterior. Si no existe
movimiento anterior a la fecha seleccionada la existencia sera 0.


gracias por tu tiempo,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Maxi Accotto" escribió en el mensaje
news:%
Hola, sin saber como son las tablas, los datos y que esperas como
resultado se me hace por lo menos a mi muy dificil ayudarte!

Pasame la estructura de las tablas, ejemplos de datos y que buscas obtener


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:#
Agradeceria me ayudaran para cambiar esta consulta con una subconsulta de
la forma Left Outer Join, pues necesito obtener mas de 1 columna de la
tabla TbaKardex y de esta manera no me es posible, a menos que repita la
consulta para cada columna.

SELECT IDProducto, Codigo, Descripcion,
ISNULL(SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC).0) AS ExistenciaFinal
FROM TbaProducto


gracias de antemano,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com




Respuesta Responder a este mensaje
#3 Maxi Accotto
04/04/2008 - 01:34 | Informe spam
Antonio, quiero ayudarte pero creo que nos debemos ayudar de forma mutua no?
te pido por favor que me pases lo que te he solicitado,

La estructura, algunos datos de ejemplo, y que buscas como resultado con
datos, o sea como deberia quedar el resultado segun los datos de ejemplo.
Porque el diseño de tu aplicacion lo conoces bien tu, yo puedo tirar quizas
una query aqui que ni te ayude.

Pasame eso si y vemos como resolver el problema


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:
ok, va mas informacion

Tabla: TbaKardex
IDKardex
Fecha {Contiene Fecha y hora
IDProducto
ExistenciaInicial
Cantidad
ExistenciaFinal

Tabla: TbaProducto
IDProducto
Codigo
Descripcion


-> La tabla TbaKardex contiene un registro por cada movimiento que afecta
el inventario, como puede ser: Compra, Venta, Entrada, Salida, Traspaso,
lo unico que necesito es que me diga el inventario que habia de cada
producto a una fecha (al final del dia). Si el producto no tuvo
movimientos en la fecha seleccionada, se toma existencia final del
movimiento anterior. Si no existe movimiento anterior a la fecha
seleccionada la existencia sera 0.


gracias por tu tiempo,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Maxi Accotto" escribió en el mensaje
news:%
Hola, sin saber como son las tablas, los datos y que esperas como
resultado se me hace por lo menos a mi muy dificil ayudarte!

Pasame la estructura de las tablas, ejemplos de datos y que buscas
obtener


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:#
Agradeceria me ayudaran para cambiar esta consulta con una subconsulta
de la forma Left Outer Join, pues necesito obtener mas de 1 columna de
la tabla TbaKardex y de esta manera no me es posible, a menos que repita
la consulta para cada columna.

SELECT IDProducto, Codigo, Descripcion,
ISNULL(SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC).0) AS ExistenciaFinal
FROM TbaProducto


gracias de antemano,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com










Respuesta Responder a este mensaje
#4 Antonio Ortiz
04/04/2008 - 02:31 | Informe spam
Despues de intentar varias veces de distintas maneras logre hacerlo de esta
manera:

SELECT IDProducto, Codigo, Descripcion, ISNULL
((SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC), 0) AS ExistenciaFinal
FROM TbaProducto


* De cualquier manera te pongo los datos de ejemplo por si hay una mejor
forma de hacer la consulta:



TbaProducto
{ IDProducto, Codigo, Descripcion }

1, 100, Coca Cola
2, 120, Pepsi
3, 90, Fanta
4, 200, Sprite


TbaKardex
{ IDKardex, Fecha, IDProducto, ExistenciaInicial, Cantidad,
ExistenciaFinal }
1000, 14/02/2008 11:30, 2, 10, 1, 9
1000, 14/02/2008 11:30, 2, 9, 1, 8
1000, 14/02/2008 11:30, 3, 5, 1, 4
1001, 14/02/2008 15:48, 1, 18, 1, 17
1000, 15/02/2008 09:02, 1, 17, 1, 16
1000, 15/02/2008 09:14, 3, 4, 1, 3
1000, 15/02/2008 09:02, 1, 16, 1, 15
1000, 15/02/2008 10:49, 1, 15, 1, 14


Con la consulta deberia obtener:

1, Coca Cola, 14
2, Pepsi, 8
3, Fanta, 3
4, Sprite, 0


Gracias por tu tiempo,

Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Maxi Accotto" escribió en el mensaje
news:
Antonio, quiero ayudarte pero creo que nos debemos ayudar de forma mutua
no? te pido por favor que me pases lo que te he solicitado,

La estructura, algunos datos de ejemplo, y que buscas como resultado con
datos, o sea como deberia quedar el resultado segun los datos de ejemplo.
Porque el diseño de tu aplicacion lo conoces bien tu, yo puedo tirar
quizas una query aqui que ni te ayude.

Pasame eso si y vemos como resolver el problema


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:
ok, va mas informacion

Tabla: TbaKardex
IDKardex
Fecha {Contiene Fecha y hora
IDProducto
ExistenciaInicial
Cantidad
ExistenciaFinal

Tabla: TbaProducto
IDProducto
Codigo
Descripcion


-> La tabla TbaKardex contiene un registro por cada movimiento que afecta
el inventario, como puede ser: Compra, Venta, Entrada, Salida, Traspaso,
lo unico que necesito es que me diga el inventario que habia de cada
producto a una fecha (al final del dia). Si el producto no tuvo
movimientos en la fecha seleccionada, se toma existencia final del
movimiento anterior. Si no existe movimiento anterior a la fecha
seleccionada la existencia sera 0.


gracias por tu tiempo,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Maxi Accotto" escribió en el mensaje
news:%
Hola, sin saber como son las tablas, los datos y que esperas como
resultado se me hace por lo menos a mi muy dificil ayudarte!

Pasame la estructura de las tablas, ejemplos de datos y que buscas
obtener


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:#
Agradeceria me ayudaran para cambiar esta consulta con una subconsulta
de la forma Left Outer Join, pues necesito obtener mas de 1 columna de
la tabla TbaKardex y de esta manera no me es posible, a menos que
repita la consulta para cada columna.

SELECT IDProducto, Codigo, Descripcion,
ISNULL(SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC).0) AS ExistenciaFinal
FROM TbaProducto


gracias de antemano,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com










Respuesta Responder a este mensaje
#5 Antonio Ortiz
04/04/2008 - 02:38 | Informe spam
Correcion, la consulta que me funciono es esta:

SELECT TbaProducto.IDProducto, TbaProducto.Codigo, TbaProducto.Descripcion,
IsNull(K.ExistenciaInicial,0) as ExistenciaInicial, IsNull(K.Cantidad,0) as
Cantidad, IsNull(K.ExistenciaFinal,0) as ExistenciaFinal
FROM TbaProducto
LEFT OUTER JOIN
( SELECT TbaKardex.* FROM TbaKardex INNER JOIN ( SELECT TbaKardex.IDProducto
AS IDProducto, MAX(IDKardex) AS IDKardex
FROM TbaKardex WHERE (Fecha <= '20080215 23:59:59.99') And (IDAlmacen=1)
GROUP BY TbaKardex.IDProducto ) K2 ON TbaKardex.IDKardex=K2.IDKardex ) K
ON TbaProducto.IDProducto = K.IDProducto


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Antonio Ortiz" escribió en el mensaje
news:
Despues de intentar varias veces de distintas maneras logre hacerlo de
esta manera:

SELECT IDProducto, Codigo, Descripcion, ISNULL
((SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC), 0) AS ExistenciaFinal
FROM TbaProducto


* De cualquier manera te pongo los datos de ejemplo por si hay una mejor
forma de hacer la consulta:



TbaProducto
{ IDProducto, Codigo, Descripcion }

1, 100, Coca Cola
2, 120, Pepsi
3, 90, Fanta
4, 200, Sprite


TbaKardex
{ IDKardex, Fecha, IDProducto, ExistenciaInicial, Cantidad,
ExistenciaFinal }
1000, 14/02/2008 11:30, 2, 10, 1, 9
1000, 14/02/2008 11:30, 2, 9, 1, 8
1000, 14/02/2008 11:30, 3, 5, 1, 4
1001, 14/02/2008 15:48, 1, 18, 1, 17
1000, 15/02/2008 09:02, 1, 17, 1, 16
1000, 15/02/2008 09:14, 3, 4, 1, 3
1000, 15/02/2008 09:02, 1, 16, 1, 15
1000, 15/02/2008 10:49, 1, 15, 1, 14


Con la consulta deberia obtener:

1, Coca Cola, 14
2, Pepsi, 8
3, Fanta, 3
4, Sprite, 0


Gracias por tu tiempo,

Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Maxi Accotto" escribió en el mensaje
news:
Antonio, quiero ayudarte pero creo que nos debemos ayudar de forma mutua
no? te pido por favor que me pases lo que te he solicitado,

La estructura, algunos datos de ejemplo, y que buscas como resultado con
datos, o sea como deberia quedar el resultado segun los datos de ejemplo.
Porque el diseño de tu aplicacion lo conoces bien tu, yo puedo tirar
quizas una query aqui que ni te ayude.

Pasame eso si y vemos como resolver el problema


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:
ok, va mas informacion

Tabla: TbaKardex
IDKardex
Fecha {Contiene Fecha y hora
IDProducto
ExistenciaInicial
Cantidad
ExistenciaFinal

Tabla: TbaProducto
IDProducto
Codigo
Descripcion


-> La tabla TbaKardex contiene un registro por cada movimiento que
afecta el inventario, como puede ser: Compra, Venta, Entrada, Salida,
Traspaso, lo unico que necesito es que me diga el inventario que habia
de cada producto a una fecha (al final del dia). Si el producto no tuvo
movimientos en la fecha seleccionada, se toma existencia final del
movimiento anterior. Si no existe movimiento anterior a la fecha
seleccionada la existencia sera 0.


gracias por tu tiempo,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com



"Maxi Accotto" escribió en el mensaje
news:%
Hola, sin saber como son las tablas, los datos y que esperas como
resultado se me hace por lo menos a mi muy dificil ayudarte!

Pasame la estructura de las tablas, ejemplos de datos y que buscas
obtener


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Antonio Ortiz" escribió en el mensaje de
noticias:#
Agradeceria me ayudaran para cambiar esta consulta con una subconsulta
de la forma Left Outer Join, pues necesito obtener mas de 1 columna de
la tabla TbaKardex y de esta manera no me es posible, a menos que
repita la consulta para cada columna.

SELECT IDProducto, Codigo, Descripcion,
ISNULL(SELECT TOP 1 ExistenciaFinal
FROM TbaKardex
WHERE (Fecha BETWEEN '20080215 00:00' AND
'20080215 13:59') AND (TbaKardex.IDProducto = TbaProducto.IDProducto)
ORDER BY IDKardex DESC).0) AS ExistenciaFinal
FROM TbaProducto


gracias de antemano,


Antonio Ortiz
asesor en sistemas
www.aortiz.net
www.progvisual.com
















Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida