MySQL - Consulta para mostrar registros en linea

   
Vista:
Imágen de perfil de Rafael

Consulta para mostrar registros en linea

Publicado por Rafael mt.rafaelf@gmail.com (5 intervenciones) el 17/09/2014 05:37:31
Tengo el siguiente planteamiento al cual no le he encontrado solución y a pesar de que me parece que debe ser sencillo, no logro dar con la forma de hacer la consulta.

Tengo dos tablas: una que contiene los datos de las fichas de los productos y otra que posee la información de las existencias de los productos en 3 almacenes. Algo así:

Tabla PRODUCTOS P

P_Codigo -------- P_Nombre ---------------------- P_Costo -------- P_Precioventa
1001 ----------- Bombillo 100 watts ----------------- 10 ----------------- 12
1021 ----------- Alicate de presión ----------------- 20 ----------------- 25
2589 ----------- Martillo de bola 2pulg ----------------- 17 ----------------- 23

Tabla PRODUCTOS_DEPOSITOS PD

PD_Codigo PD_almacen PD_Existencia
1001 ----------------- 01 ----------------- 15
1001 ----------------- 02 ----------------- 8
1021 ----------------- 01 ----------------- 2
1021 ----------------- 02 ----------------- 4
1021 ----------------- 03 ----------------- 9
2589 ----------------- 02 ----------------- 23

Con un Select haciendo JOIN entre ambas tablas, ordenando por código del producto, puedo obtener lo siguiente

Codigo ----------------- Nombre ----------------- ----------------- Almacen Existencia
1001 ----------------- Bombillo 100 watts ----------------- 01 ----------------- 15
1001 ----------------- Bombillo 100 watts ----------------- 02 ----------------- 8
1021 ----------------- Alicate de presión ----------------- 01 ----------------- 2
1021 ----------------- Alicate de presión ----------------- 02 ----------------- 4
1021 ----------------- Alicate de presión ----------------- 03 ----------------- 9
2589 ----------------- Martillo de bola 2pulg ----------------- 02 ----------------- 23

Con un Group by y el SUM, puedo tener la existencia total de cada producto. Pero necesito obtener es la existencia por almacén de forma horizontal para presentarla en un datagrid
Algo así:

Codigo ----------------- Nombre ----------------- Exist_Alm_01 ----- Exist_Alm_02 ----- Exist_Alm_03
1001 ----------------- Bombillo 100 watts ----------------- 15 ----------------- 8 ----------------- 0
1021 ----------------- Alicate de presión ----------------- 2 ----------------- 4 ----------------- 9
2589 ----------------- Martillo de bola 2pulg ----------------- 0 ----------------- 23 ----------------- 0


Por lo que he investigado, creo que con subconsultas puede hacerse, pero no conozco bien la manera. Gracias de antemano por la ayuda que me presten.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Consulta para mostrar registros en linea

Publicado por xve (898 intervenciones) el 17/09/2014 08:24:18
Hola Rafael, la manera de conseguirlo, es exactamente como comentas, juntando varios selects... algo como:

1
2
3
4
5
6
7
8
9
10
11
SELECT * FROM
(
    SELECT Codigo, Almacen as Almacen_01 FROM PRODUCTOS_DEPOSITOS PD
    WHERE PD.Almacen=1
) s1
LEFT JOIN
(
    SELECT Codigo, Almacen as Almacen_02 FROM PRODUCTOS_DEPOSITOS PD
    WHERE PD.Almacen=2
) s2
ON s1.Codigo=s2.Codigo

No lo he probado, pero tendría que ser algo así. En cada una de las consultas, únicamente devuelves los valores de un tipo de almacén, y con el JOIN los juntas.

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rafael

Consulta para mostrar registros en linea

Publicado por Rafael (5 intervenciones) el 17/09/2014 12:24:13
Gracias, lo probaré de esta manera y luego comento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael

Consulta para mostrar registros en linea

Publicado por Rafael (5 intervenciones) el 19/09/2014 01:25:30
Ayudándome con lo que me dieron, hice esto para dos depósitos, TIENDA y GALPON
Esto me dá la existencia por almacén o depósito en forma horizontal, pero no he podido agregarle los datos del producto, como Nombre, referencia, precio, costo, etc., que se sencuentran en la tabla PRODUCTOS_TERMINADOS y que tiene relación con la tabla PRODUCTOS_TERMINADOS_DEPOSITOS el campo PRODUCTO_CODIGO.
Agrego el SELECT que hice,

SELECT * FROM
(SELECT EXISTENCIA_ACTUAL AS TIENDA, DEPOSITO_CODIGO AS DEPOSITO FROM PRODUCTOS_TERMINADOS_DEPOSITOS WHERE PRODUCTOS_TERMINADOS_DEPOSITOS.DEPOSITO_CODIGO='01')
LEFT JOIN (SELECT EXISTENCIA_ACTUAL AS GALPON, DEPOSITO_CODIGO AS DEPOSITO FROM PRODUCTOS_TERMINADOS_DEPOSITOS WHERE PRODUCTOS_TERMINADOS_DEPOSITOS.DEPOSITO_CODIGO='02')

Pero he intentado agregarle lo demás antes, con join, left join, etc, y me da error. Además me aparece dos veces el campo código, (por cada almacén) y entiendo que lo lee de la tabla de depósitos, pero no lo necesito sino una sola vez.

Ahora obtengo lo siguiente
Codigo-------- tienda--------codigo -------- galpon
131231231 --------11 --------- 131231231-------- 23

Y necesito:
Código ------------------ nombre --------------- referencia -------------tienda -------- galpon
131231231 -------- bombillo 100wats -------- General Electric -------- 11 -------- 23

Estoy cerca y voy a estar buscando la solución, por eso agradezco mucho cualquier ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael

Consulta para mostrar registros en linea

Publicado por Rafael (5 intervenciones) el 19/09/2014 01:54:20
Disculpen, el SELECT lo copié incompleto. Este es el SELECT que necesito mejorar.

SELECT * FROM
(SELECT PRODUCTO_CODIGO, EXISTENCIA_ACTUAL AS TIENDA, DEPOSITO_CODIGO AS DEPOSITO FROM PRODUCTOS_TERMINADOS_DEPOSITOS WHERE PRODUCTOS_TERMINADOS_DEPOSITOS.DEPOSITO_CODIGO='01') S1
LEFT JOIN (SELECT PRODUCTO_CODIGO, EXISTENCIA_ACTUAL AS GALPON, DEPOSITO_CODIGO AS DEPOSITO FROM PRODUCTOS_TERMINADOS_DEPOSITOS WHERE PRODUCTOS_TERMINADOS_DEPOSITOS.DEPOSITO_CODIGO='02')S2 ON s1.PRODUCTO_CODIGO=s2.PRODUCTO_CODIGO

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael

Consulta para mostrar registros en linea

Publicado por Rafael (5 intervenciones) el 19/09/2014 08:18:10
Con el SELECT que muestro a continuación, he obtenido casi lo que quiero, pero me parece que está redundando en operaciones y además tiene dos defectos: Primero cuando un producto tiene existencia en los dos almacenes, aparece dos veces, no sé por qué, y lo otro es que cuando un producto no tiene imágen en el depósito, el SELECT le asigna NULL y quisiera que le asignara 0.

SELECT
CODIGO_PRODUCTO,
REFERENCIA,
NOMBRE,
(SELECT EXISTENCIA_ACTUAL AS TIENDA FROM PRODUCTOS_TERMINADOS_DEPOSITOS WHERE PRODUCTOS_TERMINADOS_DEPOSITOS.DEPOSITO_CODIGO='01' and productos_terminados.codigo_producto= productos_terminados_depositos.producto_codigo ),
(SELECT EXISTENCIA_ACTUAL AS GALPON FROM PRODUCTOS_TERMINADOS_DEPOSITOS WHERE PRODUCTOS_TERMINADOS_DEPOSITOS.DEPOSITO_CODIGO='02' and productos_terminados.codigo_producto= productos_terminados_depositos.producto_codigo )
FROM PRODUCTOS_TERMINADOS
LEFT JOIN productos_terminados_depositos ON (productos_terminados_depositos.producto_codigo=productos_terminados.codigo_producto)
ORDER BY PRODUCTOS_TERMINADOS.CODIGO_PRODUCTO

Gracias, como siempre por cualquier ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar