Como "juntar" resultados ??

20/02/2008 - 23:07 por Penta | Informe spam
Estimados.
Utilizo SQL 2000 Server SP4

Tengo 2 consultas:

La primera:
Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_2 B
On a.codigo=b.codigo
Resultado:
codigo1 5
codigo2 10

La segunda:
Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_3 C
On a.codigo=c.codigo
Resultado:
codigo1 1


Quisiera una única consulta que me retorne:

codigo1 6
codigo2 10

Si aplico UNION

me queda asi:
codigo1 5
codigo1 1
codigo2 10

Agradeceré su ayuda.

Atentamente.
Penta.

Preguntas similare

Leer las respuestas

#1 Penta
20/02/2008 - 23:45 | Informe spam
La solucion que aplique es la siguiente, pero no se si será la mejor:
(me habian faltado los group by en el post original)

Select b.codcarr,sum(isnull(a.cantidad,0)+isnull(b.cantidad,0))
cantidad From
(Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_2 B
On a.codigo=b.codigo ) A
Full Join
(Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_3 C
On a.codigo=c.codigo ) B
on a.codcarr=b.codcarr
group by a.codcarr

NOTA: El primer alias contiene 100 registros el 2do alias contiene 10
registros, de la manera actual me dan los 100 registros con sus
respectivas sumas, pero si invierto los alias o sea pongo como A el
que tiene 10 registro el resultado es 10 registro :( eso no lo
comprendo.

Agradecería sus comentarios.
Atte.
Penta.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
21/02/2008 - 02:44 | Informe spam
Penta,

si usas FULL JOIN y existe la posibilidad que un codigo que existe en la
consulta 2 no exista en la 1 y viceversa, un codigo de la consulta 1 que no
exista en la 2, entonces debes usar algo como:

select
coalesce(a.codigo, b.codigo),
isnull(a.cantidad,0) + isnull(b.cantidad,0)
from
...

Si usas el operador de union UNION ALL, entonces

select codigo, sum(cantidad) as cant
from (consulta A UNION ALL consulta B) as t
group by codigo


AMB


"Penta" wrote:

La solucion que aplique es la siguiente, pero no se si será la mejor:
(me habian faltado los group by en el post original)

Select b.codcarr,sum(isnull(a.cantidad,0)+isnull(b.cantidad,0))
cantidad From
(Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_2 B
On a.codigo=b.codigo ) A
Full Join
(Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_3 C
On a.codigo=c.codigo ) B
on a.codcarr=b.codcarr
group by a.codcarr

NOTA: El primer alias contiene 100 registros el 2do alias contiene 10
registros, de la manera actual me dan los 100 registros con sus
respectivas sumas, pero si invierto los alias o sea pongo como A el
que tiene 10 registro el resultado es 10 registro :( eso no lo
comprendo.

Agradecería sus comentarios.
Atte.
Penta.

Respuesta Responder a este mensaje
#3 Penta
21/02/2008 - 14:04 | Informe spam
Estimado Alejandro.
Muchisimas gracias, pude implementar con el operador UNION el otro no
supe como, y creo que el UNION es mas entendible.

Gracias de nuevo.
Penta.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
21/02/2008 - 15:14 | Informe spam
Penta,

Preferible que uses el operador UNION ALL, puesto que si tienes un codigo
comun en amabs consultas, y el valor de la funcion de agregacion es igual,
entonces lo tomara una sola vez.

SELECT codigo, SUM(cnt) AS sum_cnt
FROM
(
SELECT 1 AS codigo, 3 AS cnt

UNION

SELECT 1 AS codigo, 3 AS cnt
) AS t
GROUP BY codigo

SELECT codigo, SUM(cnt) AS sum_cnt
FROM
(
SELECT 1 AS codigo, 3 AS cnt

UNION ALL

SELECT 1 AS codigo, 3 AS cnt
) AS t
GROUP BY codigo
GO

AMB


"Penta" wrote:

Estimado Alejandro.
Muchisimas gracias, pude implementar con el operador UNION el otro no
supe como, y creo que el UNION es mas entendible.

Gracias de nuevo.
Penta.

Respuesta Responder a este mensaje
#5 Jesús López
21/02/2008 - 18:29 | Informe spam
SELECT Codigo, COUNT(*) AS Cantidad
FROM
(
SELECT Codigo
FROM Tabla_1 A Inner Join Tabla_2 B
On A.codigo=B.codigo

UNION ALL

SELECT Codigo
FROM Tabla_1 A Inner Join Tabla_3 C
On A.codigo=C.codigo


) AS T
GROUP BY Codigo

Saludos:

Jesús López
www.solidq.com




"Penta" escribió en el mensaje
news:
Estimados.
Utilizo SQL 2000 Server SP4

Tengo 2 consultas:

La primera:
Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_2 B
On a.codigo=b.codigo
Resultado:
codigo1 5
codigo2 10

La segunda:
Select codigo,count(*) cantidad
From Tabla_1 A Inner Join Tabla_3 C
On a.codigo=c.codigo
Resultado:
codigo1 1


Quisiera una única consulta que me retorne:

codigo1 6
codigo2 10

Si aplico UNION

me queda asi:
codigo1 5
codigo1 1
codigo2 10

Agradeceré su ayuda.

Atentamente.
Penta.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida