Buenas nuevamente....

20/05/2004 - 20:30 por Jorge Luis Medrano | Informe spam
Buenas a todos... nuevamente con un problemita

Tengo un query de una balanza comercial, el cual, gracias a la ayuda de los
compañeros del foro agregué un full join, pero al hacerlo me aparecieron
valores nulos, los cuales obviamente eran capitulos de exportación que no
aparecen en importación, y viceversa.

Hay una forma para igualar esos campos sin usar un procedimiento como
fetch?????

posiblemente el código les de una idea... aquí lo agrego



select anyo,t_valor,capitulo, sum(valor) val
into #SumSacI
from importacion
group by anyo, t_valor, capitulo


select anyo,t_valor,capitulo, sum(valor) val
into #SumSacE
from exportacion
group by anyo, t_valor, capitulo


select E.anyo as anyoe,i.anyo as anyoi, E.t_valor as t_valore, i.t_valor as
t_valori, E.capitulo as capituloe, i.capitulo as capituloi, E.val as vale,
I.val as vali
into #PriBc
from
#sumsacE as E
full join
#sumsacI as I
on
(E.capitulo = I.capitulo) and
(E.anyo = I. anyo) and
(E.t_valor = I.t_valor)

select * from #pribc


drop table #SumSacE
drop table #SumSacI
drop table #PriBc

go
 

Leer las respuestas

#1 ulises
20/05/2004 - 23:51 | Informe spam
Debo estar cansado, no entendí completamente a donde
quieres llegar ;(, en todo caso como indicas si realizas
un FULL JOIN obtienes datos de las tablas incluyendo
aquellos que no se encuentren en la otra, eso ocasiona que
algunos datos figuren como nulos, en ese caso deberías
tomar el valor correspondiente de la otra tabla, espero
que este ejemplo te ayude :

1) Si creamos dos tablas importa y exporta y los llenamos
con datos :

create table importa ( codigo int primary key, cantidad
money)
create table exporta ( codigo int primary key, cantidad
money)
go
insert into importa values ( 1, 100 )
insert into importa values ( 2, 200 )
insert into exporta values ( 2, 200 )
insert into exporta values ( 3, 300 )
go

2) Si hace un full join con todos sus datos tenemos :

select i.*, e.*
from importa i full join exporta e on i.codigo = e.codigo

resultado :

codigo cantidad codigo cantidad
1 100.0000 NULL NULL
2 200.0000 2 200.0000
NULL NULL 3 300.0000

(3 row(s) affected)

3) Si deseamos eliminar los nulos podemos hacer :

select isnull(i.codigo,e.codigo) as codigo,
isnull(i.cantidad,0) as importaciones,
isnull(e.cantidad,0) as exportaciones
from importa i full join exporta e on i.codigo = e.codigo

resultado :

codigo importaciones exportaciones
1 100.0000 .0000
2 200.0000 200.0000
3 .0000 300.0000

(3 row(s) affected)

¿es eso lo que deseas?

Saludos,
Ulises
PD. Creo que hilos abajo Javier te envío un código para
que lo que solicitabas, no lo he revisado, pero viniendo
de él creo que deberías tomarlo en consideración :)

Buenas a todos... nuevamente con un problemita

Tengo un query de una balanza comercial, el cual, gracias


a la ayuda de los
compañeros del foro agregué un full join, pero al hacerlo


me aparecieron
valores nulos, los cuales obviamente eran capitulos de


exportación que no
aparecen en importación, y viceversa.

Hay una forma para igualar esos campos sin usar un


procedimiento como
fetch?????

posiblemente el código les de una idea... aquí lo agrego



select anyo,t_valor,capitulo, sum(valor) val
into #SumSacI
from importacion
group by anyo, t_valor, capitulo


select anyo,t_valor,capitulo, sum(valor) val
into #SumSacE
from exportacion
group by anyo, t_valor, capitulo


select E.anyo as anyoe,i.anyo as anyoi, E.t_valor as


t_valore, i.t_valor as
t_valori, E.capitulo as capituloe, i.capitulo as


capituloi, E.val as vale,
I.val as vali
into #PriBc
from
#sumsacE as E
full join
#sumsacI as I
on
(E.capitulo = I.capitulo) and
(E.anyo = I. anyo) and
(E.t_valor = I.t_valor)

select * from #pribc


drop table #SumSacE
drop table #SumSacI
drop table #PriBc

go

Preguntas similares