none
Retorno de consulta entre Duas Tabelas RRS feed

  • 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.

    quinta-feira, 9 de fevereiro de 2012 17:04

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.

    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

    quinta-feira, 9 de fevereiro de 2012 17:45
  • 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.

    quinta-feira, 9 de fevereiro de 2012 19:09