none
Me ajudem nesta Query RRS feed

  • Pergunta

  •  

    Olá,

     

    Tenho 3 bancos de dados, suponhamos que sejam os bancos A, B e C que representam 3 depósitos, certo, em cada um desses bancos existe a tabela PRODUTOS e os nomes das colunas são iguais, agora suponhamos os valores das tabelas:

     

    BANCO A - TABELA PRODUTOS

     

    CÓDIGO      ESTOQUE

     

    AN-44         3

    EX-510        5

    SZ-720        4

    ZW-987       0

     

    BANCO B - TABELA PRODUTOS

     

    CÓDIGO      ESTOQUE

     

    AN-44         10

    ZW-987       1

     

    BANCO C - TABELA PRODUTOS

     

    CÓDIGO      ESTOQUE

     

    ZW-987       70

     

    Vejam que apenas os depósitos A e B possuem o produto AN-44, já o C não possui, como eu faço para selecionar todos os produtos das 3 bases sem repetir nenhum código, sendo que tenho também que mostrar o estoque em cada depósito e uma outra coluna com o estoque total dos 3 depósitos somados.......

     

    preciso gerar uma tabela, um select ou um único XML com essas informações! já tentei com o UNION mas não deu certo!

     

    me ajudem por favor! abraços!

    sexta-feira, 18 de abril de 2008 19:57

Respostas

  • Boa Tarde Thiago,

     

    Entendo que sua necessidade deva ser muito urgente mas peço que poste sua dúvida em um único fórum. Postar nos três fóruns só irá descentralizar a discussão e além de dificultar a resposta acaba poluindo os demais fóruns. Peço que por favor exclua o seu post dos demais fóruns. Segue uma possível solução

     

    Code Snippet

    CREATE TABLE #tblA (

    CODIGO VARCHAR(6),

    ESTOQUE INT)

     

    INSERT INTO #tblA VALUES ('AN-44',3)

    INSERT INTO #tblA VALUES ('EX-510',5)

    INSERT INTO #tblA VALUES ('SZ-720',4)

    INSERT INTO #tblA VALUES ('ZW-987',0)

     

    CREATE TABLE #tblB (

    CODIGO VARCHAR(6),

    ESTOQUE INT)

     

    INSERT INTO #tblB VALUES ('AN-44',10)

    INSERT INTO #tblB VALUES ('ZW-987',1)

     

    CREATE TABLE #tblC (

    CODIGO VARCHAR(6),

    ESTOQUE INT)

     

    INSERT INTO #tblC VALUES ('ZW-987',70)

     

    SELECT CODIGO,

    ISNULL((SELECT ESTOQUE FROM #tblA AS A WHERE Res.CODIGO = A.CODIGO),0) AS ESTOQUEA,

    ISNULL((SELECT ESTOQUE FROM #tblB AS B WHERE Res.CODIGO = B.CODIGO),0) AS ESTOQUEB,

    ISNULL((SELECT ESTOQUE FROM #tblC AS C WHERE Res.CODIGO = C.CODIGO),0) AS ESTOQUEC,

     

    ISNULL((SELECT ESTOQUE FROM #tblA AS A WHERE Res.CODIGO = A.CODIGO),0) +

    ISNULL((SELECT ESTOQUE FROM #tblB AS B WHERE Res.CODIGO = B.CODIGO),0) +

    ISNULL((SELECT ESTOQUE FROM #tblC AS C WHERE Res.CODIGO = C.CODIGO),0) AS ESTOQUETOTAL

    FROM

    (SELECT CODIGO FROM #tblA

    UNION

    SELECT CODIGO FROM #tblB

    UNION

    SELECT CODIGO FROM #tblC) As Res

     

    DROP TABLE #tblA

    DROP TABLE #tblB

    DROP TABLE #tblC

     

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 18 de abril de 2008 20:41

Todas as Respostas

  • Boa Tarde Thiago,

     

    Entendo que sua necessidade deva ser muito urgente mas peço que poste sua dúvida em um único fórum. Postar nos três fóruns só irá descentralizar a discussão e além de dificultar a resposta acaba poluindo os demais fóruns. Peço que por favor exclua o seu post dos demais fóruns. Segue uma possível solução

     

    Code Snippet

    CREATE TABLE #tblA (

    CODIGO VARCHAR(6),

    ESTOQUE INT)

     

    INSERT INTO #tblA VALUES ('AN-44',3)

    INSERT INTO #tblA VALUES ('EX-510',5)

    INSERT INTO #tblA VALUES ('SZ-720',4)

    INSERT INTO #tblA VALUES ('ZW-987',0)

     

    CREATE TABLE #tblB (

    CODIGO VARCHAR(6),

    ESTOQUE INT)

     

    INSERT INTO #tblB VALUES ('AN-44',10)

    INSERT INTO #tblB VALUES ('ZW-987',1)

     

    CREATE TABLE #tblC (

    CODIGO VARCHAR(6),

    ESTOQUE INT)

     

    INSERT INTO #tblC VALUES ('ZW-987',70)

     

    SELECT CODIGO,

    ISNULL((SELECT ESTOQUE FROM #tblA AS A WHERE Res.CODIGO = A.CODIGO),0) AS ESTOQUEA,

    ISNULL((SELECT ESTOQUE FROM #tblB AS B WHERE Res.CODIGO = B.CODIGO),0) AS ESTOQUEB,

    ISNULL((SELECT ESTOQUE FROM #tblC AS C WHERE Res.CODIGO = C.CODIGO),0) AS ESTOQUEC,

     

    ISNULL((SELECT ESTOQUE FROM #tblA AS A WHERE Res.CODIGO = A.CODIGO),0) +

    ISNULL((SELECT ESTOQUE FROM #tblB AS B WHERE Res.CODIGO = B.CODIGO),0) +

    ISNULL((SELECT ESTOQUE FROM #tblC AS C WHERE Res.CODIGO = C.CODIGO),0) AS ESTOQUETOTAL

    FROM

    (SELECT CODIGO FROM #tblA

    UNION

    SELECT CODIGO FROM #tblB

    UNION

    SELECT CODIGO FROM #tblC) As Res

     

    DROP TABLE #tblA

    DROP TABLE #tblB

    DROP TABLE #tblC

     

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 18 de abril de 2008 20:41
  • thiago,

     

    Minha sugestão:

     

    Code Snippet

    SELECT ID_COD,

    SUM(ESTOQUE) AS TOTAL_ESTOQUE,

    SUM(CASE ID_BANCO WHEN 'BANCO A' THEN ESTOQUE ELSE 0 END) TOTAL_BANCO_A,

    SUM(CASE ID_BANCO WHEN 'BANCO B' THEN ESTOQUE ELSE 0 END) TOTAL_BANCO_B,

    SUM(CASE ID_BANCO WHEN 'BANCO C' THEN ESTOQUE ELSE 0 END) TOTAL_BANCO_C

    FROM (

    SELECT ID_COD, ESTOQUE, 'BANCO A' ID_BANCO FROM BANCO_A

    UNION ALL

    SELECT ID_COD, ESTOQUE, 'BANCO B' ID_BANCO FROM BANCO_B

    UNION ALL

    SELECT ID_COD, ESTOQUE, 'BANCO C' ID_BANCO FROM BANCO_C) AS TMP

    GROUP BY ID_COD

     

     

    Code Snippet

    CREATE TABLE BANCO_A(

    ID_COD  char (10) NULL,

    ESTOQUE int NULL

    )

     

    CREATE TABLE BANCO_B(

    ID_COD  char (10) NULL,

    ESTOQUE int NULL

    )

     

    CREATE TABLE BANCO_C(

    ID_COD  char (10) NULL,

    ESTOQUE int NULL

    )

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.
    sexta-feira, 18 de abril de 2008 20:53
  • Valeu Gustavoooooo! funcionou direitinho do jeito que eu queria! agradeço mesmo, meu chefe já ia me cobrar de novo, tava muito embassado pra mim! valeeeeeeu!

     

    abraços!

     

    segunda-feira, 28 de abril de 2008 19:16
  • Olá Thiago,

     

    Que bom que funcionou... Acho que agora você está com crédito com o chefe (rs)

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 28 de abril de 2008 19:30