problema con una consulta compleja

11/04/2007 - 17:54 por Sergio E. | Informe spam
Hola, estoy haciendo una consulta algo compleja que en esencia es como
sigue:

select c1.*, c2.*, c3.*,c4.* from
(select campos from tabla1 where condicion1) as c1 left join
(select campos from tabla1 where condicion2) as c2 on c1.clave=c2.clave left
join
(select campos from tabla1 where condicion3) as c3 on c1.clave=c3.clave left
join
(select campos from tabla1 where condicion4) as c4 on c1.clave=c4.clave
where ultimofiltro order by c1.campox

El detalle es que si el primer select no trae datos, no me muestra nada,
aunque yo se que el segundo y/o tercer select si tienen y el cuarto no
siempre trae,

El objetivo es consultar datos de una tabla, donde cada select from tabla1
me trae datos de un mes distinto, y quiero que se vean todos los campos uno
junto a otro de todos los selects..
por ejemplo

enero | febrero | marzo | abril
datos select1 | datos select2 | datos select3 | datos select4
venta1 prom1| venta2 prom2| venta3 prom3| venta3 prom4


¿Alguien me puede dar alguna sugerencia la respecto?

Saludos y gracias.
Sergio E.
DCE2005 - 2*

Preguntas similare

Leer las respuestas

#16 Sergio E.
15/04/2007 - 10:37 | Informe spam
Tu estructura funciono maravillosamente, mil gracias


Saludos,
Sergio E.
DCE2005 - 2*


"Javier Loria" escribió en el mensaje
news:
Hola:
El full outer join en AMBAS debe generar el resultado deseado, pero su
desempeño no sera muy bueno, no por ser un full outer join, sino por
exigir 3 veces lectura de la misma tabla.
El siguiente SELECT debe tener mejor desempeño.
==> SET DATEFORMAT DMY
SELECT d.IdDepto
, d.NomDepto
, '01/08/2006' AS FechaInicialAgo06
, '31/08/2006' AS FechaFinalAgo06
, ISNULL(SUM(CASE WHEN m.FechaOp BETWEEN
CONVERT(datetime, '01/08/2006')
AND CONVERT(datetime,'31/08/2006')
THEN tm.ArticulosVendidos
ELSE 0 END), 0) AS ArticulosAgo06
, ISNULL(SUM(CASE WHEN m.FechaOp BETWEEN
CONVERT(datetime, '01/08/2006')
AND CONVERT(datetime,'31/08/2006')
THEN tm.CostoMenusal
ELSE 0 END, 0) AS CostoAgo06
, '01/09/2006' AS FechaInicialSep06
, '30/09/2006' AS FechaFinalSep06
, ISNULL(SUM(CASE WHEN m.FechaOp BETWEEN
CONVERT(datetime, '01/09/2006')
AND CONVERT(datetime, '30/09/2006')
THEN tm.ArticulosVendidos
ELSE 0 END), 0) AS ArticulosSep06,
, ISNULL(SUM(CASE WHEN m.FechaOp BETWEEN
CONVERT(datetime, '01/09/2006')
AND CONVERT(datetime, '30/09/2006')
THEN tm.CostoMenusal
ELSE 0 END, 0) AS CostoSep06
, '01/10/2006' AS FechaInicialOct06
, '31/10/2006' AS FechaFinalOct06
, ISNULL(SUM(CASE WHEN m.FechaOp BETWEEN
CONVERT(datetime, '01/10/2006')
AND CONVERT(datetime, '30/09/2006')
THEN tm.ArticulosVendidos
ELSE 0 END), 0) AS ArticulosOct06
, ISNULL(SUM(CASE WHEN m.FechaOp BETWEEN
CONVERT(datetime, '01/10/2006')
AND CONVERT(datetime, '31/10/2006')
THEN tm.CostoMenusal
ELSE 0 END, 0) AS CostoOct06
FROM Departamentos AS d
LEFT JOIN TotalesMensuales AS tm
ON tm.IdDepto = d.IdDepto
WHERE d.ClaveInterna = '205'
AND (d.IdDepto = 7 OR d.IdDeptoPadre = 7)
AND tm.FechaOp BETWEEN CONVERT(datetime, '01/08/2006')
AND CONVERT(datetime,'31/10/2006')
GROUP BY d.IdDepto, d.NomDepto, d.E_Nivel)
==> Espero te sirva.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.




"Sergio E." <gruporemp[ARROBA]hotmail.com> wrote in message
news:
Aqui pongo la consulta sql completa a ver si le ven donde la estoy
echando a perder...

SET DATEFORMAT DMY

SELECT c1.*, c2.*, c3.*

FROM (

SELECT d.IdDepto, d.NomDepto, '01/08/2006' AS FechaInicialAgo06,
'31/08/2006' AS FechaFinalAgo06,

ISNULL(SUM(tm.ArticulosVendidos), 0) AS ArticulosAgo06,
ISNULL(SUM(tm.CostoMenusal), 0)

AS CostoAgo06

FROM Departamentos AS d INNER JOIN

TotalesMensuales AS tm ON tm.IdDepto = d.IdDepto

WHERE d.ClaveInterna = '205' AND (d.IdDepto = 7 OR

d.IdDeptoPadre = 7) AND tm.FechaOp BETWEEN CONVERT(datetime,
'01/08/2006') AND CONVERT(datetime,

'31/08/2006')

GROUP BY d.IdDepto, d.NomDepto, d.E_Nivel) AS c1 LEFT JOIN

(SELECT d.IdDepto, '01/09/2006' AS FechaInicialSep06, '30/09/2006' AS
FechaFinalSep06,

ISNULL(SUM(tm.ArticulosVendidos), 0) AS ArticulosSep06,
ISNULL(SUM(tm.CostoMenusal), 0)

AS CostoSep06

FROM Departamentos AS d INNER JOIN

TotalesMensuales AS tm ON tm.IdDepto = d.IdDepto

WHERE d.ClaveInterna = '205' AND (d.IdDepto = 7 OR

d.IdDeptoPadre = 7) AND tm.FechaOp BETWEEN CONVERT(datetime,
'01/09/2006') AND CONVERT(datetime,

'30/09/2006')

GROUP BY d.IdDepto) AS c2 ON c1.IdDepto = c2.IdDepto LEFT JOIN

(SELECT d.IdDepto, '01/10/2006' AS FechaInicialOct06, '31/10/2006' AS
FechaFinalOct06,

ISNULL(SUM(tm.ArticulosVendidos), 0) AS ArticulosOct06,
ISNULL(SUM(tm.CostoMenusal), 0)

AS CostoOct06

FROM Departamentos AS d INNER JOIN

TotalesMensuales AS tm ON tm.IdDepto = d.IdDepto

WHERE d.ClaveInterna = '205' AND (d.IdDepto = 7 OR

d.IdDeptoPadre = 7) AND tm.FechaOp BETWEEN CONVERT(datetime,
'01/10/2006') AND CONVERT(datetime,

'31/10/2006')

GROUP BY d.IdDepto) AS c3 ON c1.IdDepto = c3.IdDepto

ORDER BY c1.NomDepto ASC


Saludos,
Sergio E.
DCE2005 - 2*



"Sergio E." <gruporemp[ARROBA]hotmail.com> escribió en el mensaje
news:%
Hola, estoy haciendo una consulta algo compleja que en esencia es como
sigue:

select c1.*, c2.*, c3.*,c4.* from
(select campos from tabla1 where condicion1) as c1 left join
(select campos from tabla1 where condicion2) as c2 on c1.claveÂ.clave
left join
(select campos from tabla1 where condicion3) as c3 on c1.claveÃ.clave
left join
(select campos from tabla1 where condicion4) as c4 on c1.claveÄ.clave
where ultimofiltro order by c1.campox

El detalle es que si el primer select no trae datos, no me muestra nada,
aunque yo se que el segundo y/o tercer select si tienen y el cuarto no
siempre trae,

El objetivo es consultar datos de una tabla, donde cada select from
tabla1 me trae datos de un mes distinto, y quiero que se vean todos los
campos uno junto a otro de todos los selects..
por ejemplo

enero | febrero | marzo | abril
datos select1 | datos select2 | datos select3 | datos select4
venta1 prom1| venta2 prom2| venta3 prom3| venta3 prom4


¿Alguien me puede dar alguna sugerencia la respecto?

Saludos y gracias.
Sergio E.
DCE2005 - 2*










email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida