Usuário com melhor resposta
Retorno de consulta entre Duas Tabelas

Pergunta
-
Boa tarde, Pessoal!
Estou com um problema em uma consulta, vou tentar explicar: Eu possuo 2 tabelas com as mesmas colunas, Tabela A e Tabela B, na Tabela A existem dados que são iguais ao da Tabela B e existem dados diferentes da Tabela B, a mesma situação ocorre para a Tabela B, eu preciso que me retorne os dados da seguinte maneira: Todos os dados que estão na Tabela A e não estão na Tabela B; Todos os dados que estão na Tabela B e não estão na Tabela A; e quando tiver dados iguais tem que trazer o campo QTDE da tabela B menos o da Tabela A.
Tabela A Tabela B
ID QTDE ID QTDE
1 2 3 4
2 3 2 1
4 4 6 2
7 3 7 4
Resultado
ID QTDE
1 2
2 -2
3 4
4 4
6 2
7 1
Obrigado pela Ajuda.
Respostas
-
Gapimex, obrigado pela ajuda, porém não deu certo, eu resolvi da seguinte maneira:
select a.ID, a.QTDE from TA as a where a.ID not in (select b.ID from TB as b)
union
select b.ID, b.QTDE from TB as b where b.ID not in (select a.ID from TA as a)
union
select a.ID, (b.QTDE - a.QTDE) as QTDE from TA as a join TB as b on (b.ID = a.ID)
Vlw pela força, a sua idéia me deu uma luz.
- Marcado como Resposta João Carlos Junior quinta-feira, 9 de fevereiro de 2012 19:09
Todas as Respostas
-
Boa tarde,
Experimente desta forma:
DECLARE @ta TABLE ( ID INT, QTDE INT ) DECLARE @tb TABLE ( ID INT, QTDE INT ) INSERT INTO @ta VALUES (1, 2), (2, 3), (4, 4), (7, 3) INSERT INTO @tb VALUES (3, 4), (2, 1), (6, 2), (7, 4) select a.ID, a.QTDE from @ta as a left join @tb as b on b.ID = a.ID where b.ID is null union select b.ID, b.QTDE from @ta as a right join @tb as b on b.ID = a.ID where a.ID is null union select a.ID,(b.QTDE - a.QTDE) as QTDE from @ta as a join @tb as b on a.ID = b.ID
Espero que seja útil.
Assinatura: Imobiliarias em Suzano
-
Gapimex, obrigado pela ajuda, porém não deu certo, eu resolvi da seguinte maneira:
select a.ID, a.QTDE from TA as a where a.ID not in (select b.ID from TB as b)
union
select b.ID, b.QTDE from TB as b where b.ID not in (select a.ID from TA as a)
union
select a.ID, (b.QTDE - a.QTDE) as QTDE from TA as a join TB as b on (b.ID = a.ID)
Vlw pela força, a sua idéia me deu uma luz.
- Marcado como Resposta João Carlos Junior quinta-feira, 9 de fevereiro de 2012 19:09