Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > DB2
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 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
  #2  
Antiguo 28-11-2006
Avatar de jjorell
jjorell jjorell is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
jjorell Va por buen camino
Talking Faltaba el GROUP BY

Hola! ya solucione mi problema... resulta que se me olvido mover el group by afuera de la subconsulta, al final me queda asi :

Código SQL [-]
SELECT 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) Rela LEFT OUTER JOIN TELACRUDA.MSTROLCR Inve 
ON Rela.CodMezcla = Inve.DTCMEZ AND Rela.IdCrudo = Inve.DTCODI WHERE ((Inve .DTSTAT='') OR (Inve .DTSTAT='P')) 
GROUP BY IdProductos,Producto,CodMezcla,IdCrudo,Crudo,IdEspecialHilo,IdHilo,Hilo,CodComposicion,Porcentaje,Pr  oveedorHilo,Desc_Producto,TipProceso,Composicion,IdClientes,Cliente,Ano,IdPlanificacion

Esta si me funciona bien
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta sobre left / Right outer join ContraVeneno MS SQL Server 2 06-07-2006 15:18:12
Duplicados con LEFT OUTER JOIN Cabanyaler MS SQL Server 11 17-11-2005 08:46:23
LEFT OUTER JOIN e INNER JOIN Juntos alcides SQL 3 08-07-2005 18:06:27
Como hago este left outer join sagravelbio Firebird e Interbase 1 22-01-2004 16:05:03
Left Outer Join en MSSQL Viet SQL 5 26-08-2003 21:24:25


La franja horaria es GMT +2. Ahora son las 11:24:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi