Ir para conteúdo
Fórum Script Brasil
  • 0

UNION (correto agora)


Guest --Fábio --

Pergunta

Guest --Fábio --

Meus Amigos peço-lhes ajuda, tenho 3 tabelas como descritas no exemplo abaixo, como posso fazer um UNION para que os dados fiquem da forma do exemplo onde chamo a resposta de TABELA D ?

TABELA A TABELA B TABELA C

codigo valor_A codigo valor_B codigo valor_C

1 100 1 440 1 310

2 197 3 250 2 276

3 200 3 442

4 500 5 222

5 470

resultar em:

TABELA D

codigo valor_A valor_B valor_C

1 100 440 310

2 197 276

3 200 250 442

4 500

5 470 222

ou seja sem ele colocar tudo um embaixo do outro e sim do lado. Alguém pode me dar uma dica?

Fábio

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Sou fraquinho em SQL mas aco que assim rola:

declare @TABA  table (codigo int, valor_A int)
insert into  @TABA (codigo , valor_A ) values (1,100)
insert into  @TABA (codigo , valor_A ) values (2,197)
insert into  @TABA (codigo , valor_A ) values (3,200)
insert into  @TABA (codigo , valor_A ) values (4,500)
insert into  @TABA (codigo , valor_A ) values (5,470)

declare @TABB table (codigo int, valor_B int)
insert into  @TABB (codigo , valor_B ) values (1,440)
insert into  @TABB (codigo , valor_B ) values (3,240)
insert into  @TABB (codigo , valor_B ) values (3,442)
insert into  @TABB (codigo , valor_B ) values (5,222)

declare @TABC table (codigo int, valor_C int)
insert into  @TABC (codigo , valor_C ) values (1,310)
insert into  @TABC (codigo , valor_C ) values (2,276)

declare @TABD table (codigo int, valor_A int, valor_B int , valor_C int)

insert into  @TABD (codigo)
select codigo from @TABA
union 
select codigo from @TABB
union 
select codigo from @TABC
order by codigo

update @TABD set valor_A = a.valor_A
from @TABD d, @TABA a
where a.codigo = d.codigo

update @TABD set valor_B = b.valor_B
from @TABD d, @TABB b
where b.codigo = d.codigo

update @TABD set valor_C = c.valor_C
from @TABD d, @TABC C
where c.codigo = d.codigo

select * from @tabD

Agora vamos aguardar os amigos do forúm pois podem sugerir algo mais elegante.

Agora só mesmo um toque evite abrir post duplicados porque dificulta a ajuda e a pesquisa psoterior. quando o poeste estives errado posta a correção mas não abra outro post. Não sou moderador nem estou pagando sapo é só uma dica.

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Fábio --

Caro Jothaz.

vou testar tua dica, ok.. mas caso não funcione tem como eu lhe enviar via e-mail a tabela q desenhei em excel? pois eu sei q não ficou claro os exemplos que postei..

aguardo..

Fábio

Sou fraquinho em SQL mas aco que assim rola:

declare @TABA  table (codigo int, valor_A int)
insert into  @TABA (codigo , valor_A ) values (1,100)
insert into  @TABA (codigo , valor_A ) values (2,197)
insert into  @TABA (codigo , valor_A ) values (3,200)
insert into  @TABA (codigo , valor_A ) values (4,500)
insert into  @TABA (codigo , valor_A ) values (5,470)

declare @TABB table (codigo int, valor_B int)
insert into  @TABB (codigo , valor_B ) values (1,440)
insert into  @TABB (codigo , valor_B ) values (3,240)
insert into  @TABB (codigo , valor_B ) values (3,442)
insert into  @TABB (codigo , valor_B ) values (5,222)

declare @TABC table (codigo int, valor_C int)
insert into  @TABC (codigo , valor_C ) values (1,310)
insert into  @TABC (codigo , valor_C ) values (2,276)

declare @TABD table (codigo int, valor_A int, valor_B int , valor_C int)

insert into  @TABD (codigo)
select codigo from @TABA
union 
select codigo from @TABB
union 
select codigo from @TABC
order by codigo

update @TABD set valor_A = a.valor_A
from @TABD d, @TABA a
where a.codigo = d.codigo

update @TABD set valor_B = b.valor_B
from @TABD d, @TABB b
where b.codigo = d.codigo

update @TABD set valor_C = c.valor_C
from @TABD d, @TABC C
where c.codigo = d.codigo

select * from @tabD

Agora vamos aguardar os amigos do forúm pois podem sugerir algo mais elegante.

Agora só mesmo um toque evite abrir post duplicados porque dificulta a ajuda e a pesquisa psoterior. quando o poeste estives errado posta a correção mas não abra outro post. Não sou moderador nem estou pagando sapo é só uma dica.

Link para o comentário
Compartilhar em outros sites

  • 0

Caros,

acho que seria mais fácil assim:

SELECT

a.codigo, a.valor_a

, ( SELECT valor_b FROM tabB b WHERE a.codigo = b.codigo ) AS codb

, ( SELECT valor_c FROM tabC c WHERE a.codigo = c.codigo ) AS codc

FROM tabA AS a

Por favor, testem se estou certo.

Uma observação: Se na subquery existir mais de um registro para o mesmo código, é necessário o uso do MAX no select.

Atc,

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Noite amigo,

Acho que isso pode te ajudar:

create Table #TCodigoD ( Codigo int, valor varchar(500))

declare @codigo int, @valor varchar(10)

DECLARE Sequencia CURSOR FOR

select Codigo, valor_a as Valor from TcodigoA union

select Codigo, valor_b as Valor from TcodigoB union

select Codigo, valor_c as Valor from TcodigoC

OPEN Sequencia

FETCH NEXT FROM Sequencia INTO @codigo, @valor

WHILE @@FETCH_STATUS = 0

BEGIN

if exists(select * from #TCodigoD where Codigo = @codigo)

update #TCodigoD set valor = valor + ', '+ @valor where Codigo = @codigo

else

insert into #TCodigoD select @codigo, @valor

FETCH NEXT FROM Sequencia INTO @codigo, @valor

END

CLOSE Sequencia

DEALLOCATE Sequencia

select * from #TCodigoD

drop table #TCodigoD

Resultado gravador na tabela #TCodigoD:

Codigo Valor

1 100, 310, 440

2 197, 276

3 200, 250, 442

4 500

5 222, 470

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...