Subconsulta

Tengo un problema en sql server que no he podido resolver se trata de lo siguiente, realizo dos consultas por separado para obtener una suma de unos tramites primero la realizo obteniendo los tramites RECIBIDOS y en la segunda los tramites que CUMPLIERON esta ultima lo se por los campos de fecha
Ahora lo que necesito es unir esas dos consultas para poder tener tener los recibios y los cumplidos en una solo pero he intentado de varias formas y no me queda he probado con exists, in, select dentro de otro select y no encuentro la manera de relverlo por favor te pido de tu ayuda estas son las sentencias por separado.
Consulta de tramites recibidos
SELECT Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto, SUM(SeguimientoTramite.Lote) AS Recibidos
FROM Ctl_Tramites LEFT OUTER JOIN
SeguimientoTramite ON Ctl_Tramites.idTramite = SeguimientoTramite.idTramite
WHERE (SeguimientoTramite.Cancelado = 0) AND (Ctl_Tramites.Aviso = 0) AND (Ctl_Tramites.Automatico = 0) AND (Ctl_Tramites.idDictamen = 1)
GROUP BY Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto
ORDER BY Ctl_Tramites.CveRFTS
CONSULTA DE TRAMITES CUMPLIDOS
SELECT SUM(SeguimientoTramite.Lote) AS Cumple, Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto
FROM SeguimientoTramite LEFT OUTER JOIN
Ctl_Tramites ON SeguimientoTramite.idTramite = Ctl_Tramites.idTramite
WHERE (SeguimientoTramite.Cancelado = 0) AND (Ctl_Tramites.Aviso = 0) AND (Ctl_Tramites.Automatico = 0) AND
(SeguimientoTramite.FechaRecibeM <= SeguimientoTramite.fechaDisponibilidad) AND (Ctl_Tramites.idDictamen = 1)
GROUP BY Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto, Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto
ORDER BY Ctl_Tramites.CveRFTS
como se puede ver en ambas consultas tiene que ser canceldo=0, automatico=0 aviso=0 iddictamen=1.
Obtendo como resultado en la primer consulta cveRTFS, nombre corto, recibidos (la obtengo con un SUM(SeguimientoTramite. Lote) .
en la segunda consulta obtengo cveRFTS, nombre corto, cumple(estos tambien los obtengo de SUM(SeguimietnoTramite.Lote)). A diferencia que agrego la condicion de que fechaRecibeM sea <=fechaDisponibilidad
como unir esas dos consultas para que el final pueda tener recibidos y cumple en una sola consulta???   obtener cveRFTS, nombre corto, recibidos, cumple.

1 respuesta

Respuesta
1
A ver si te entendí bien, ¿necesitas qué todos los registros recibidos (consulta 1) más todos los registros que cumplen (consulta dos) te salgan en una tabla? si es asi:
SELECT T.CveRFTS, T.NombreCorto, SUM(S.Lote) AS [Recibidos y Cumple] INTO Temp
FROM Ctl_Tramites T LEFT OUTER JOIN
SeguimientoTramite S ON T.idTramite = S.idTramite
WHERE (S.Cancelado = 0) AND (T.Aviso = 0) AND (T.Automatico = 0) AND (T.idDictamen = 1)
GROUP BY T.CveRFTS, T.NombreCorto
ORDER BY T.CveRFTS
--CONSULTA DE TRAMITES CUMPLIDOS
INSERT INTO Temp SELECT T.CveRFTS, T.NombreCorto, SUM(S.Lote) AS Cumple
FROM SeguimientoTramite S LEFT OUTER JOIN
Ctl_Tramites T ON S.idTramite = T.idTramite
WHERE (S.Cancelado = 0) AND (T.Aviso = 0) AND (T.Automatico = 0) AND
(S.FechaRecibeM <= S.fechaDisponibilidad) AND (T.idDictamen = 1)
GROUP BY T.CveRFTS, T.NombreCorto
ORDER BY T.CveRFTS
SELECT * FROM temp
DROP TABLE Temp
donde el resultado de la primera consulta se crea una tabla temporal y el resultado de la segunda consulta se inserta sobre esa table temporal, se muestran lor registros y se elimina la tabla temporal.
Es lo que se me ocurre por ahora.
Ok, también he probado con tablas temportales pero no me es de gran ayuda, lo que necesito es tener por separado RECIBIDOS y CUMPLE. ¿Realice esta cionsulta pero el resultado que obtengo es el mismo para todas las filas de CUMPLE donde estará mi error?
SELECT Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto, SUM(SeguimientoTramite.Lote) AS [Recibidos ],
(SELECT SUM(SeguimientoTramite.Lote)
FROM SeguimientoTramite RIGHT OUTER JOIN
Ctl_Tramites ON SeguimientoTramite.idTramite = Ctl_Tramites.idTramite
WHERE (SeguimientoTramite.Cancelado = 0) AND (Ctl_Tramites.Aviso <> 1) AND (Ctl_Tramites.Automatico <> 1) AND (Ctl_Tramites.idDictamen = 1)
AND (SeguimientoTramite.FechaRecibeM <= SeguimientoTramite.fechaDisponibilidad) AND
SeguimientoTramite.idTramite = Ctl_Tramites.idTramite) AS CUMPLE
FROM Ctl_Tramites LEFT OUTER JOIN
SeguimientoTramite ON Ctl_Tramites.idTramite = SeguimientoTramite.idTramite
WHERE (SeguimientoTramite.Cancelado = 0) AND (Ctl_Tramites.Aviso = 0) AND (Ctl_Tramites.Automatico = 0) AND (Ctl_Tramites.idDictamen = 1)
GROUP BY Ctl_Tramites.CveRFTS, Ctl_Tramites.NombreCorto
ORDER BY Ctl_Tramites.CveRFTS
Resultado:::
CveRFTS NombreCorto RECIBIDOS CUMPLE
0001 tramite sin resolución 536 43023
0002 tramite con resolicion 2076 43023
IMPI-01 información 3162 43023
Las tres primeras columnas están bien, pero como te menciono en Cumple repite el mismo valor
Bueno despues de una pequeña asesoria obtuve la siguiente consulta espero te sirva
SELECT T.CveRFTS, T.NombreCorto,
Recibidos = SUM (CASE WHEN (S.Cancelado = 0) AND (T.Aviso = 0) AND (T.Automatico = 0)  AND T.idDictamen = 1
THEN S.Lote ELSE 0 END),
Cumple = sum (CASE WHEN (S.Cancelado = 0) AND (T.Aviso = 0) AND (T.Automatico = 0) AND (S.FechaRecibeM <= S.fechaDisponibilidad) AND (T.idDictamen = 1)
THEN S.Lote ELSE 0 END)
FROM SeguimientoTramite S LEFT OUTER JOIN
Ctl_Tramites T ON S.idTramite = T.idTramite
GROUP BY T.CveRFTS, T.NombreCorto
ORDER BY T.CveRFTS
Saludos. =)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas