Ver Mensaje Individual
  #1  
Antiguo 28-11-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Reputación: 0
jjorell Va por buen camino
Exclamation LEFT OUTER JOIN 1 tabla contra 6 mas

Hola! Espero alguien me puede ayudar a solucionar este problema.

Estoy haciendo un sistema en deplhi contra SQLServer 2005, pero los datos de origen los tomo del DB2. El sistema consiste en calcular la necesidad de Hilo a partir de la cantidad de tela acabada, pero para esto tengo que tener la relacion entre la tela acabada y la tela cruda, luego la tela acabada con el hilo, el problema esque la tela acabada puede relacionarse con varios crudo, es por esto que debo de hacer la siguiente query (la del problema).

Código SQL [-]
SELECT DISTINCT A.CODACA IdProductos,B.TANOMT Producto,A.CODMEZ CodMezcla,A.CODCRU IdCrudo,LTRIM(RTRIM(LTRIM(RTRIM(C.TCSIGL)) || LTRIM(RTRIM(C.TCNUME)) || ' ' || LTRIM(RTRIM(C.TCDESC)) || ' ' || LTRIM(RTRIM(D.TCDESC)) )) Crudo,
ROUND(SUM(COALESCE(E.DTNTKG,0)),2) CanDisponible,C.TCIDES IdEspecialHilo, C.PGCODH IdHilo,C.TCTITU Hilo,C.PGMESH CodComposicion,ROUND(C.PGPORC,2) Porcentaje,C.TCORIG ProveedorHilo,C.TCDESC Desc_Producto,C.TCIDCO TipProceso,F.NMEZCL Composicion,0 IdClientes,'Cliente',2006 Ano,2 IdPlanificacion 
FROM INVENT.REACACRU A,INVENT.MSTELAAC B, TELACRUDA.MSTTCRU C,COLORAN.MSTCRUDO D,TELACRUDA.MSTROLCR E ,COLORAN.MSTMESCL F
WHERE A.CODACA=B.TACODT AND A.CODMEZ=C.TCCMEZ AND A.CODCRU=C.TCCODI AND A.CODACA=11011566
AND A.CODMEZ=D.TCCMEZ AND A.CODCRU=D.TCCODI AND A.CODMEZ * = E.DTCMEZ AND A.CODCRU * = E.DTCODI AND C.PGMESH=F.CMEZCL AND ((E.DTSTAT='') OR (E.DTSTAT='P'))
GROUP BY A.CODACA,B.TANOMT,A.CODMEZ,A.CODCRU,LTRIM(RTRIM(LTRIM(RTRIM(C.TCSIGL)) || LTRIM(RTRIM(C.TCNUME)) || ' ' || LTRIM(RTRIM(C.TCDESC)) || ' ' || LTRIM(RTRIM(D.TCDESC)) )),
C.TCIDES, C.PGCODH,C.TCTITU,C.PGMESH,ROUND(C.PGPORC,2),C.TCORIG,C.TCDESC,C.TCIDCO,F.NMEZCL

Pero resulta que cuando aun no ha ingresado tela cruda en bodega (tabla TELACRUDA.MSTROLCR E) no esta registrada asi que no me realiza el Join, por esta razon he intendado hacerlo de la siguiente manera:

Código SQL [-]
SELECT Rela.IdProductos,Producto,CodMezcla,IdCrudo,Crudo, ROUND(SUM(COALESCE(Inve.DTNTKG,0)),2) CanDisponible,IdEspecialHilo,IdHilo,Hilo,CodComposicion,Porcentaje,ProveedorHilo,Desc_Producto,TipPr  oceso,Composicion,IdClientes,Cliente,Ano,IdPlanificacion FROM
(SELECT DISTINCT A.CODACA IdProductos,B.TANOMT Producto,A.CODMEZ CodMezcla,A.CODCRU IdCrudo,
LTRIM(RTRIM(LTRIM(RTRIM(C.TCSIGL)) || LTRIM(RTRIM(C.TCNUME)) || ' ' || LTRIM(RTRIM(C.TCDESC)) || ' ' || LTRIM(RTRIM(D.TCDESC)) )) Crudo,C.TCIDES IdEspecialHilo, C.PGCODH IdHilo,C.TCTITU Hilo,
C.PGMESH CodComposicion,ROUND(C.PGPORC,2) Porcentaje,C.TCORIG ProveedorHilo,C.TCDESC Desc_Producto,C.TCIDCO TipProceso,F.NMEZCL Composicion,
0 IdClientes,'Cliente' Cliente,2006 Ano,2 IdPlanificacion 
FROM INVENT.REACACRU A,INVENT.MSTELAAC B, TELACRUDA.MSTTCRU C,COLORAN.MSTCRUDO D,COLORAN.MSTMESCL F
WHERE A.CODACA=B.TACODT AND A.CODMEZ=C.TCCMEZ AND A.CODCRU=C.TCCODI AND A.CODACA=11011566
AND A.CODMEZ=D.TCCMEZ AND A.CODCRU=D.TCCODI AND C.PGMESH=F.CMEZCL
GROUP BY A.CODACA,B.TANOMT,A.CODMEZ,A.CODCRU,LTRIM(RTRIM(LTRIM(RTRIM(C.TCSIGL)) || LTRIM(RTRIM(C.TCNUME)) || ' ' || LTRIM(RTRIM(C.TCDESC)) || ' ' || LTRIM(RTRIM(D.TCDESC)) )),
C.TCIDES, C.PGCODH,C.TCTITU,C.PGMESH,ROUND(C.PGPORC,2),C.TCORIG,C.TCDESC,C.TCIDCO,F.NMEZCL) Rela LEFT OUTER JOIN TELACRUDA.MSTROLCR Inve 
ON Rela.CodMezcla = Inve.DTCMEZ AND Rela.IdCrudo = Inve.DTCODI WHERE ((Inve .DTSTAT='') OR (Inve .DTSTAT='P'))

Sin ningun resultado positivo...solo el siguiente error:

la columna IDPRODUCTOS o expresion en la sentencia SELECT es invalida.

En SQL Server esto lo hubiese solucionado con *= y ya pero DB2 no lo acepta

Espero alguien pueda ayudarme o me de alguna idea sobre el mensaje (ya probe quitando ese campo y el error me persiste siempre en el campo que queda primero en la sentencia).
Responder Con Cita