SQL - Joins

 
Vista:

Joins

Publicado por Omar (10 intervenciones) el 05/09/2008 01:38:43
Buen día espero me puedan ayudar con esta duda que ya llevo bastante tiempo y no encuentro una solución, resulta que tengo el siguiente query

Select DA.Codigo As Defecto,
Count(DA.Codigo) As Cantidad
From catDefectoAparato DA
Inner Join catInventarioHogar IH On IH.xtDefectoAparato_Defecto_Critico = DA.Indice
Inner Join catCapturaInspecciones CI On CI.xkInventarioHogar_Indice = IH.xqAsociacion
Inner Join catLoteAsignado LA On LA.Codigo_Lote = CI.Codigo_Lote
Inner Join catworkflowhistory WH On WH.Folio = LA.indice
Where LA.Codigo_Lote = 'L32RNZNGROB08381' And xtProceso_Proceso = '9' And WH.xtTarea_Tarea = '44'
Group By DA.Codigo, CI.Codigo_Lote
Order By DA.Codigo

Y me arroja el siguiente resultado

Defecto Cantidad
01 4
10 1
61 4
63 5

el problema es que tengo que hacer que aparezcan todos los codigos de defecto
aunque no se haya capturado un defecto con ese codigo en las inpecciones(catCapturaInspecciones)
Un ejemplo de lo que medebería mostrar es lo siguietne

Defecto Cantidad
01 4
02 0
03 0 <<-----------Estos son Codigos de defectos que no se capturaron
04 0 en las inspecciones pero se pueden llegar a capturar
. .
. .
. .
10 1
61 4
63 5

Alguna sugerencia ya intente con Left Right Full Outer Joins pero no doy con
alguna solución me podrian orientar un poco
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

RE:Joins

Publicado por Jorge Morales (25 intervenciones) el 05/09/2008 02:03:13
Saludos Omar, creo que tendrías que hacer algo así:

Select CI.Codigo As Defecto,
Count(DA.Codigo) As Cantidad
From catCapturaInspecciones CI
left Join catDefectoAparato DA On IH.xqAsociacion = CI.xkInventarioHogar_Indice
Inner Join catInventarioHogar IH On IH.xtDefectoAparato_Defecto_Critico = DA.Indice
inner Join catLoteAsignado LA On LA.Codigo_Lote = CI.Codigo_Lote
Inner Join catworkflowhistory WH On WH.Folio = LA.indice
Where LA.Codigo_Lote = 'L32RNZNGROB08381' And xtProceso_Proceso = '9' And WH.xtTarea_Tarea = '44'
Group By CI.Codigo, CI.Codigo_Lote
Order By CI.Codigo

creo que el error es por que estabas agrupando por los codigos que guardas en catDefectoAparato, ya que no se han capturado algunos codigos por eso no te los mostrará nunca en tu consulta, es por eso que hay que indicar que te muestre los codigos de catCapturaInspecciones, tambien asegurate que todos los defectos (catCapturaInspecciones) tienen asignado un lote, ya que de lo contrario deberías utilizar left join para que te muestre todos los que no tengan.

Haz tus pruebas y avisanos si de algo te sirvió o si tienes alguna otra duda.
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

RE:Joins

Publicado por Omar (10 intervenciones) el 05/09/2008 22:15:40
Bueno he hecho pruebas y este resultado es que me me llamo la atención lo comento para ver i me pueden orientar

COMO ANTES

Select DA.Codigo,
Count(IH.xtDefectoAparato_Defecto_Critico) As Cantidad
From catDefectoAparato DA
Left Join catInventarioHogar IH On IH.xtDefectoAparato_Defecto_Critico = DA.Indice
Left Join catCapturaInspecciones CI On CI.xkInventarioHogar_Indice = IH.xqAsociacion
Left Join catLoteAsignado LA On LA.Codigo_Lote = CI.Codigo_Lote
Inner Join catworkflowhistory WH On WH.Folio = LA.indice
Where LA.Codigo_Lote = 'L32RNZNGROB08381' And xtProceso_Proceso = '9' And WH.xtTarea_Tarea = '44'
Group By DA.Codigo
Order By DA.Codigo

Codigo Cantidad
01 4
10 1
61 4
63 5

PERO SI LE QUITO EL WHERE

Select DA.Codigo,
Count(IH.xtDefectoAparato_Defecto_Critico) As Cantidad
From catDefectoAparato DA
Left Join catInventarioHogar IH On IH.xtDefectoAparato_Defecto_Critico = DA.Indice
Left Join catCapturaInspecciones CI On CI.xkInventarioHogar_Indice = IH.xqAsociacion
Left Join catLoteAsignado LA On LA.Codigo_Lote = CI.Codigo_Lote
Inner Join catworkflowhistory WH On WH.Folio = LA.indice
Group By DA.Codigo
Order By DA.Codigo

Codigo Cantidad
01 8361
02 194
03 48
04 172
05 160
. 86362
. 2117
. 200
. 9587
. 26590
. 3688
. 5464
. 71924
. 444434
. 140637
. 166454
. 26535
. 0
. 0
. 0 <<<<<<<<esto es lo que quiero hacer que aparescan los codigos
. 0 de defectos si no a hecho algunan isnpeccion entonces la
. 10599 cantidad es 0 pero necesito ponerle una condicion where
n 11774 y al ponersela me da regresa el resultado de arriba

OTROS QUERYS CON LOS QUE HE INTENTADO

Select CA.Codigo, Count(IH.xtDefectoAparato_Defecto_Critico) As Cantidad --1329396
From catInventarioHogar IH
Full Outer Join catDefectoAparato CA On CA.Indice = IH.xtDefectoAparato_Defecto_Critico
Full Outer Join catCapturaInspecciones CI On CI.xkInventarioHogar_Indice = IH.xqAsociacion
Full Outer Join catLoteAsignado LA On LA.Codigo_Lote = CI.Codigo_Lote
Full Outer Join catworkflowhistory WH On WH.Folio = LA.indice
--Where LA.Codigo_Lote = 'L32RNZNGROB08381' And xtProceso_Proceso = '9' And WH.xtTarea_Tarea = '44'
--And CI.xtEmpresaColabGNA_Empresa <> 'EC-1419'
Group By CA.Codigo
Order By CA.Codigo



Select DA.Codigo As Defecto,
Count(IH.xtDefectoAparato_Defecto_Critico) As Cantidad
From catLoteAsignado LA
Left Outer Join catCapturaInspecciones CI On CI.Codigo_Lote = LA.Codigo_Lote
Left Outer Join catInventarioHogar IH On IH.xqAsociacion = CI.xkInventarioHogar_Indice
Left Outer Join catDefectoAparato DA On DA.Indice = IH.xtDefectoAparato_Defecto_Critico
Inner Join catworkflowhistory WH On WH.Folio = LA.indice
Where LA.Codigo_Lote = 'L32RNZNGROB08381' And xtProceso_Proceso = '9' And WH.xtTarea_Tarea = '44'
And CI.xtEmpresaColabGNA_Empresa <> 'EC-1419'
Group By DA.Codigo, CI.Codigo_Lote
Order By DA.Codigo--, CI.Codigo_Lo
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

RE:Joins

Publicado por Omar (10 intervenciones) el 06/09/2008 00:14:44
Muchas gracias por su ayuda acabo de encontrar la solución al problema que tenía pongo el codigo con que lo resolví talvez le sirva a alguien

*******************************SOLUCION*****************************************

Select DA.Codigo, (Select Count(*)
From catInventarioHogar IH
Inner Join catCapturaInspecciones CI On CI.xkInventarioHogar_Indice = IH.xqAsociacion
Inner Join catLoteAsignado LA On LA.Codigo_Lote = CI.Codigo_Lote
Inner Join catworkflowhistory WH On WH.Folio = LA.indice
Where IH.xtDefectoAparato_Defecto_Critico = DA.Indice And LA.Codigo_Lote = 'L32RNZNGROB08381' And WH.xtProceso_Proceso = '9' And WH.xtTarea_Tarea = '44')
From catDefectoAparato DA
Order By Da.Codigo

**************************RESULTADO****************************************
Defecto Cantidad
01 4
02 0
03 0
04 0
05 0
10 1
11 0
13 0
14 0
15 0
16 0
17 0
60 0
61 4
62 0
63 5
64 0
65 0
66 0
67 0
68 0
80 0
81 0
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