SQL Server - Unir 3 Select en uno solo

 
Vista:

Unir 3 Select en uno solo

Publicado por Juan (6 intervenciones) el 07/08/2008 11:38:18
Hola!

Necesito unir tres select diferentes en una sola. Cada select devuelve una tabla con unos ciertos valores y lo que necesito es unirlas para que todos los valores aparezcan en una sola tabla.

Son estas:

SELECT S.id_tipo, P.Ano, P.Mes, SUM(P.Importe) AS Suma
FROM im_SubTipos AS S INNER JOIN
im_ImpPres AS P INNER JOIN (
SELECT id_Actuacion, MIN(AnoMesAct) AS Mini, Ano
FROM im_ImpPres AS im_ImpPres_1
GROUP BY id_Actuacion, Ano
HAVING (Ano = @Anio )
) AS M ON P.Ano = M.Ano AND P.AnoMesAct = M.Mini
AND P.id_Actuacion = M.id_Actuacion INNER JOIN
im_Actuaciones AS A ON P.id_Actuacion = A.id_Actuacion
ON S.id_SubT = A.id_SubT
AND S.id_tipo = A.Id_Tipo
AND S.id_Activ = A.id_Activ
AND S.id_Pais = A.id_Pais
GROUP BY S.id_tipo, P.Ano, P.Mes
ORDER BY S.id_tipo, P.Ano, P.Mes
end

SELECT S.id_tipo, P.Ano, P.Mes, SUM(P.Importe) AS Suma
FROM im_SubTipos AS S INNER JOIN
im_ImpPres AS P INNER JOIN (
SELECT id_Actuacion, MAX(AnoMesAct) AS Maxi, Ano
FROM im_ImpPres AS im_ImpPres_1
GROUP BY id_Actuacion, Ano
HAVING (Ano = @Anio )
) AS M ON P.Ano = M.Ano AND P.AnoMesAct = M.Maxi
AND P.id_Actuacion = M.id_Actuacion INNER JOIN
im_Actuaciones AS A ON P.id_Actuacion = A.id_Actuacion
ON S.id_SubT = A.id_SubT
AND S.id_tipo = A.Id_Tipo
AND S.id_Activ = A.id_Activ
AND S.id_Pais = A.id_Pais
GROUP BY S.id_tipo, P.Ano, P.Mes
ORDER BY S.id_tipo, P.Ano, P.Mes
end

SELECT S.id_tipo, I.Anio, I.Mes, SUM(I.Valor) AS Suma
FROM im_SubTipos AS S INNER JOIN
im_Actuaciones AS A ON S.id_Pais = A.id_Pais
AND S.id_Activ = A.id_Activ
AND S.id_tipo = A.Id_Tipo
AND S.id_SubT = A.id_SubT INNER JOIN
im_ConceptosImp AS I ON A.id_Actuacion = I.id_Actuacion INNER JOIN (
SELECT id_Actuacion, --MAX(AnoMesAct) AS Maxi,
Anio, TipoImporte
FROM im_ConceptosImp AS im_ConceptosImp_1
GROUP BY id_Actuacion, Anio, TipoImporte
HAVING (Anio = @Anio )
AND (TipoImporte = 're')
) AS M ON I.TipoImporte = M.TipoImporte
AND I.Anio = M.Anio
AND I.id_Actuacion = M.id_Actuacion
--And I.AnoMesAct = M.Maxi
--AND I.Mes <= @Mes
GROUP BY S.id_tipo, I.Anio, I.Mes, A.id_Conces
--HAVING(A.id_Conces = 25)
ORDER BY S.id_tipo, I.Anio, I.Mes
end


Muchas gracias!
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:Unir 3 Select en uno solo

Publicado por Juan (6 intervenciones) el 07/08/2008 14:41:15
Podria poner un UNION[ALL] para hacerlo???

Como sería la sintaxis??

Gracias!!
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:Unir 3 Select en uno solo

Publicado por pacopaz (131 intervenciones) el 08/08/2008 18:08:52
Utiliza Union para traer los resultados de todos los queries, pero que sólo te presente uno de cada uno, si es que se repiten entre los queries. Utiliza Union All para que traiga todos, sin distinción de repetidos.
La sintaxis es algo así:

select
...
union [all]
select
...
Order by
...

El Order By se pone hasta el final, para definir por cual columna se van a ordenar todos los resultados.
Sólo recuerda que el número de columnas (campos) debe ser igual en todos los queries. Es decir, si en el primero tienes 5 campos y en el segundo tienes 6, te marcará un error.
Para más información, refiérete a aesta página:
http://msdn.microsoft.com/es-es/library/ms191141.aspx

Espero que te sirva.

Saludos.
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