Restar informacion de dos tablas

31/10/2008 - 22:22 por Alonso Vilela | Informe spam
Tengo dos tablas una de entra y otra de salida, necesito restar le
coontenido de la tabla de entra con la de salida
(informacion de Entrada) select id_toner,sum(amount) from inputoner group by
id_toner

(Informacion de Salida) Select id_toner,sum(amount) from outputoner group by
id_toner

Necesito el resultado algo coimo

id_toner, total

1 50

Gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
31/10/2008 - 22:51 | Informe spam
Alonso Vilela,

Usa cada query como una tabla derivada.

select
coalesce(a.id_toner, b.id_toner) as id_toner,
isnull(a.input_amount, 0) - isnull(b.output_amount, 0) as diff
from
(
select id_toner, sum(amount) as input_amount
from inputoner
group by id_toner
) as a
full outer join
(
Select id_toner, sum(amount) output_amount
from outputoner
group by id_toner
) as b
a.id_toner = b.id_toner
GO

Use "full oter join" por si acaso tienes salidas sin entradas, cosa que no
debe ser si tienes restricciones adecuadas. En caso de estar seguro de no
tener salidas sin entradas, puedes usar "left outer join" porque puede que
tengas entradas sin salidas, y si usas "inner join", esas filas no saldran.


AMB


"Alonso Vilela" wrote:

Tengo dos tablas una de entra y otra de salida, necesito restar le
coontenido de la tabla de entra con la de salida
(informacion de Entrada) select id_toner,sum(amount) from inputoner group by
id_toner

(Informacion de Salida) Select id_toner,sum(amount) from outputoner group by
id_toner

Necesito el resultado algo coimo

id_toner, total

1 50

Gracias







Respuesta Responder a este mensaje
#2 Carlos M. Calvelo
01/11/2008 - 01:32 | Informe spam
Hola Alonso,

On 31 okt, 22:22, "Alonso Vilela" wrote:
Tengo dos tablas una de entra y otra de salida, necesito restar le
coontenido de la tabla de entra con la de salida
(informacion de Entrada) select id_toner,sum(amount) from inputoner group by
id_toner

(Informacion de Salida) Select id_toner,sum(amount) from outputoner group by
id_toner

Necesito el resultado algo coimo

id_toner, total

1 50




Aquí te dejo dos alternativas al full outer join que te propone
Alejandro. Fíjate en los dos casos en el signo (-) de la segunda
columna en la segunda subconsulta.

1)
select id_toner, sum(amount) as total
from (select id_toner, amount from inputoner
union all
select id_toner, -amount from outputoner) T
group by id_toner


2)
select id_toner, sum(amount) as total
from (select id_toner,sum(amount) as amount
from inputoner group by id_toner
union all
select id_toner,-sum(amount) as amount
from outputoner group by id_toner) T
group by id_toner

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 Alonso Vilela
04/11/2008 - 19:01 | Informe spam
gracias a los dos lo provare

"Carlos M. Calvelo" wrote in message
news:
Hola Alonso,

On 31 okt, 22:22, "Alonso Vilela" wrote:
Tengo dos tablas una de entra y otra de salida, necesito restar le
coontenido de la tabla de entra con la de salida
(informacion de Entrada) select id_toner,sum(amount) from inputoner group
by
id_toner

(Informacion de Salida) Select id_toner,sum(amount) from outputoner group
by
id_toner

Necesito el resultado algo coimo

id_toner, total

1 50




Aquí te dejo dos alternativas al full outer join que te propone
Alejandro. Fíjate en los dos casos en el signo (-) de la segunda
columna en la segunda subconsulta.

1)
select id_toner, sum(amount) as total
from (select id_toner, amount from inputoner
union all
select id_toner, -amount from outputoner) T
group by id_toner


2)
select id_toner, sum(amount) as total
from (select id_toner,sum(amount) as amount
from inputoner group by id_toner
union all
select id_toner,-sum(amount) as amount
from outputoner group by id_toner) T
group by id_toner

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 Alonso Vilela
04/11/2008 - 19:29 | Informe spam
gracias funciono perfecto...
las dos soluciones, pero la de alejandro no funciono

Un duda por que usas la T y en la primera sentencia por que no usas el group
by y solo usas amount

Gracias


"Carlos M. Calvelo" wrote in message
news:
Hola Alonso,

On 31 okt, 22:22, "Alonso Vilela" wrote:
Tengo dos tablas una de entra y otra de salida, necesito restar le
coontenido de la tabla de entra con la de salida
(informacion de Entrada) select id_toner,sum(amount) from inputoner group
by
id_toner

(Informacion de Salida) Select id_toner,sum(amount) from outputoner group
by
id_toner

Necesito el resultado algo coimo

id_toner, total

1 50




Aquí te dejo dos alternativas al full outer join que te propone
Alejandro. Fíjate en los dos casos en el signo (-) de la segunda
columna en la segunda subconsulta.

1)
select id_toner, sum(amount) as total
from (select id_toner, amount from inputoner
union all
select id_toner, -amount from outputoner) T
group by id_toner


2)
select id_toner, sum(amount) as total
from (select id_toner,sum(amount) as amount
from inputoner group by id_toner
union all
select id_toner,-sum(amount) as amount
from outputoner group by id_toner) T
group by id_toner

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
04/11/2008 - 19:58 | Informe spam
Hola Alonso,

On 4 nov, 19:29, "Alonso Vilela" wrote:
gracias funciono perfecto...
las dos soluciones, pero la de alejandro no funciono



Pues ahora que lo dices me he fijado bien y lo que le
pasa a la de Alejandro es que se ha olvidado al final "ON"

Cambia el la última linea
a.id_toner = b.id_toner
por esto
on a.id_toner = b.id_toner

y verás como también funciona.



Un duda por que usas la T y en la primera sentencia por que no usas el group
by y solo usas amount




La T (también podría haber sido: AS T) es un alias (nombre de tabla)
que se puede utilizar en el resto de la consulta para referirse al
resultado de la union (todo lo que está entre paréntesis).
O sea que el select exterior tiene un FROM T (donde T es el nombre
de toda la expresión)

En la primera sentencia solo hago una unión de todos los registros
de las dos tablas y no tengo ninguna suma. Solo le cambio el
signo a todo lo que viene de la tabla outputoner.
Después le dejo sumar todo a la consulta exterior que es la que
por eso necesita un group by.

En el segundo ejemplo (que hace lo mismo) sumo a los dos niveles
por eso hay también group by en los dos niveles.

Espero se entienda.

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida