SQL - Inner Join con 5 tablas

 
Vista:
sin imagen de perfil

Inner Join con 5 tablas

Publicado por Dani (1 intervención) el 13/09/2016 12:46:23
Buenas!! A ver si me podéis echar un cable.. que estoy bloqueado y no consigo hacer el SQL bien...

Tengo 5 tablas con Inner Join en la que quiero obtener una serie de datos a partir de un numero de articulo.

Una de las tablas es la de precios, en la que tengo
Articulo
Fecha de registro
Precio

Para esta tabla puedo tener multiples veces el mismo articulo con diferente fecha y precio y al hacer la query me salen tantas veces como datos hay en esa tabla.

La única forma que tengo de vincular la tabla de precios con el resto es solo por el campo articulo

He probado con una subselect para buscar MAX(fecha) pero pasa de mi.

Esta es la Select que tengo...

Muchas gracias por anticipado!

SELECT
MVXJDTA.OOLINE.OBFACI AS PLANTA,
MVXJDTA.OOLINE.OBWHLO AS ALMACEN,
MVXJDTA.OOLINE.OBCUOR AS [Ref Cliente],
MVXJDTA.OOLINE.OBORNO AS Encomenda,
MVXJDTA.OOLINE.OBPONR AS Linea,
MVXJDTA.OOLINE.OBRORN AS [OF],
MVXJDTA.MWOPTR.DJPLGR AS PROVEEDOR,
MVXJDTA.MWOPTR.DJEMNO AS [USUARIO RF],
MVXJDTA.OOLINE.OBITNO AS [ARTICULO FAB M3],
MVXJDTA.OOLINE.OBPOPN AS [ARTICULO FAB GEODE],
MVXJDTA.OOLINE.OBTEDS AS DESCRIPCION,
MVXJDTA.MITTRA.MTCAMU AS SSCC,
MVXJDTA.MITTRA.MTTRQT AS CANTIDAD,
MVXJDTA.MITMAS.MMUNMS AS [UD MEDIDA],
MVXJDTA.MITTRA.MTRGDT AS [FECHA EXP],
MVXJDTA.MITTRA.MTRGTM AS [HORA EXP],
CASE WHEN MVXJDTA.OPRBAS.ODFVDT= MAX(MVXJDTA.OPRBAS.ODFVDT) THEN MVXJDTA.OPRBAS.ODSAPR END AS [PRECIO DE VENTA],
CASE WHEN MVXJDTA.MITTRA.MTRGDT= MAX(MVXJDTA.MITTRA.MTRGDT) THEN MVXJDTA.MCWCCO.KECDPR END AS [COSTE RH]
FROM MVXJDTA.MCWCCO INNER JOIN
(MVXJDTA.OPRBAS INNER JOIN
(MVXJDTA.MITMAS INNER JOIN
(MVXJDTA.MWOPTR INNER JOIN
(MVXJDTA.MITTRA INNER JOIN MVXJDTA.OOLINE
ON (MVXJDTA.MITTRA.MTRIDN = MVXJDTA.OOLINE.OBRORN)
AND (MVXJDTA.MITTRA.MTITNO = MVXJDTA.OOLINE.OBITNO)
AND (MVXJDTA.MITTRA.MTCONO = MVXJDTA.OOLINE.OBCONO))
ON (MVXJDTA.MWOPTR.DJMFNO = MVXJDTA.MITTRA.MTPRMF)
AND (MVXJDTA.MWOPTR.DJFACI = MVXJDTA.OOLINE.OBFACI)
AND (MVXJDTA.MWOPTR.DJCONO = MVXJDTA.MITTRA.MTCONO))
ON (MVXJDTA.MITMAS.MMITNO = MVXJDTA.OOLINE.OBITNO)
AND (MVXJDTA.MITMAS.MMCONO = MVXJDTA.OOLINE.OBCONO))
ON (MVXJDTA.OPRBAS.ODITNO = MVXJDTA.MITTRA.MTITNO)
AND (MVXJDTA.OPRBAS.ODCONO = MVXJDTA.MITTRA.MTCONO))
ON (MVXJDTA.MCWCCO.KEOBV1 = MVXJDTA.MWOPTR.DJPLGR)
AND (MVXJDTA.MCWCCO.KEOBV2 = MVXJDTA.MITMAS.MMITNO)
AND (MVXJDTA.MCWCCO.KEFACI = MVXJDTA.OOLINE.OBFACI)
AND (MVXJDTA.MCWCCO.KECONO = MVXJDTA.OOLINE.OBCONO)
WHERE MVXJDTA.OOLINE.OBCONO=100 AND MVXJDTA.MWOPTR.DJREND=1 AND MVXJDTA.MITTRA.MTRGDT BETWEEN '20160801' AND '20160805'
AND MVXJDTA.OOLINE.OBRORN='1141571' AND MVXJDTA.MITTRA.MTCAMU='750697610005189668'
GROUP BY MVXJDTA.OOLINE.OBFACI,MVXJDTA.OOLINE.OBWHLO,
MVXJDTA.OOLINE.OBCUOR,
MVXJDTA.OOLINE.OBORNO,
MVXJDTA.OOLINE.OBPONR,
MVXJDTA.OOLINE.OBRORN,
MVXJDTA.MWOPTR.DJPLGR,
MVXJDTA.MWOPTR.DJEMNO,
MVXJDTA.OOLINE.OBITNO,
MVXJDTA.OOLINE.OBPOPN,
MVXJDTA.OOLINE.OBTEDS,
MVXJDTA.MITTRA.MTCAMU,
MVXJDTA.MITTRA.MTTRQT,
MVXJDTA.MITMAS.MMUNMS,
MVXJDTA.MITTRA.MTRGDT,
MVXJDTA.MITTRA.MTRGTM,
MVXJDTA.OPRBAS.ODSAPR,
MVXJDTA.OPRBAS.ODFVDT,
MVXJDTA.MCWCCO.KECDPR
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
sin imagen de perfil

Inner Join con 5 tablas

Publicado por antonio (2 intervenciones) el 14/09/2016 18:38:14
una solución podría ser usar una tabla temporal para trae el valor máximo de fecha por articulo y realizar el inner join con esa tabla
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