none
Update com Select RRS feed

  • Pergunta

  • Bom dia a todos!

    Escrevi a seguinte inserção:

    INSERT INTO R051SAC(NUMEMP, TIPCOL, NUMCAD, CODOEM, CODCAL, VALDES, VALCOP, ORIPLA)
    (select
      R046ver.numemp,
      R046ver.tipcol,
      R046ver.numcad,
      140,
      R046VER.CodCal,
      SUM(R046ver.ValEve) as ValEve,
      0,
      'D'
    from
      R046ver
    where
      NumEmp = 5 and
      TipCol = 1 and
      CodCal = 39 and
      CodEve in (598, 588, 561)
    group by
      numemp,
      tipcol,
      numcad,
      codcal)

    No entanto, existe a possibilidade de conter na tabela R051SAC algum registro que o select retornar. Caso isso ocorra eu preciso apenas somar o valor de SUM(R046ver.ValEve) ao R051SAC.ValDes, para isso preciso fazer um update.

     

    Existe uma possibilidade de encaixar o update no código acima?

    quarta-feira, 11 de janeiro de 2012 14:44

Respostas

  • Olá Rapapell,

     

    Acho que um merge no seu caso irá resolver, tente o script abaixo.

    MERGE R051SAC AS T
    USING (SELECT
                      R046ver.numemp
                    , R046ver.tipcol
                    , R046ver.numcad
                    , 140
                    , R046VER.CodCal
                    , SUM(R046ver.ValEe) as ValEve
                    , 0
                    ,'D'
        FROM R046ver
        WHERE  NumEmp = 5 and
               TipCol = 1 and
               CodCal = 39 and
               CodEve in (598, 588, 561)
        GROUP BY  numemp,
                  tipcol,
                  numcad,
                  codcal) AS S
    ON T.numemp = S.numemp --ALTERE AQUI PARA A CONDIÇÃO QUE VOCÊ DESEJAR
    WHEN MATCHED THEN UPDATE SET VALDES = (VALDES + S.ValEve)
    WHEN NOT MATCHED BY TARGET THEN INSERT (NUMEMP, TIPCOL, NUMCAD, CODOEM, CODCAL, VALDES, VALCOP, ORIPLA)
                                    VALUES (S.numemp,S.tipcol,S.numcad,140,S.CodCal,S.ValEve,0,'D')
    


    Teste o script antes e veja se é isso que precisa.

    Caso tenha dúvidas com o merge, segue link que pode lhe ser útil:

    http://technet.microsoft.com/pt-br/library/bb510625.aspx

    Espero ter ajudado.


    David Silva MCP | MCTS | ITILF Blog: http://tilive.wordpress.com
    • Sugerido como Resposta Antero Marques quarta-feira, 11 de janeiro de 2012 23:45
    • Marcado como Resposta Rapapell quinta-feira, 12 de janeiro de 2012 15:18
    quarta-feira, 11 de janeiro de 2012 20:00

Todas as Respostas

  • Rapapel qual a versão de seu SQL Server?

     


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 11 de janeiro de 2012 17:04
    Moderador
  • SQL Server 2008 Standard
    quarta-feira, 11 de janeiro de 2012 17:37
  • Olá Rapapell,

     

    Acho que um merge no seu caso irá resolver, tente o script abaixo.

    MERGE R051SAC AS T
    USING (SELECT
                      R046ver.numemp
                    , R046ver.tipcol
                    , R046ver.numcad
                    , 140
                    , R046VER.CodCal
                    , SUM(R046ver.ValEe) as ValEve
                    , 0
                    ,'D'
        FROM R046ver
        WHERE  NumEmp = 5 and
               TipCol = 1 and
               CodCal = 39 and
               CodEve in (598, 588, 561)
        GROUP BY  numemp,
                  tipcol,
                  numcad,
                  codcal) AS S
    ON T.numemp = S.numemp --ALTERE AQUI PARA A CONDIÇÃO QUE VOCÊ DESEJAR
    WHEN MATCHED THEN UPDATE SET VALDES = (VALDES + S.ValEve)
    WHEN NOT MATCHED BY TARGET THEN INSERT (NUMEMP, TIPCOL, NUMCAD, CODOEM, CODCAL, VALDES, VALCOP, ORIPLA)
                                    VALUES (S.numemp,S.tipcol,S.numcad,140,S.CodCal,S.ValEve,0,'D')
    


    Teste o script antes e veja se é isso que precisa.

    Caso tenha dúvidas com o merge, segue link que pode lhe ser útil:

    http://technet.microsoft.com/pt-br/library/bb510625.aspx

    Espero ter ajudado.


    David Silva MCP | MCTS | ITILF Blog: http://tilive.wordpress.com
    • Sugerido como Resposta Antero Marques quarta-feira, 11 de janeiro de 2012 23:45
    • Marcado como Resposta Rapapell quinta-feira, 12 de janeiro de 2012 15:18
    quarta-feira, 11 de janeiro de 2012 20:00
  • Era exatamente o que estava precisando!

    Apenas acrescentei os campos do select após a cláusula "AS  S" e montei minha condição na cláusula ON.

    Funcionou perfeitamente.

    Muito obrigado, achei este recurso muito interessante.

    Abraços

    quinta-feira, 12 de janeiro de 2012 15:18