
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
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


0