none
update com case (sintaxe correta) RRS feed

  • Pergunta

  • Preciso fazer um update na minha tabela, com um case.

    Fiz da seguinte forma:

    UPDATE

    #TB_RESULTADO

     

    SELECT CASE WHEN VL_MES1_FORECAST == '0,00'
                                    THEN VL_VARIACAO = VL_MES1_REALIZADO - VL_MES1_ORCADO,
                                   
    ELSE VL_PERCENTUAL = VL_MES1_REALIZADO /VL_MES1_ORCADO
    FROM #TB_RESULTADO

     

    Dá erro de sintaxe.

    Onde estou errando?

    Também tentei com o if else, da seguinte forma:

     

    UPDATE RES
    IF
    (SELECT VL_MES1_FORECAST FROM #TB_RESULTADO) = '0,00'
    BEGIN
        SET
               
    VL_VARIACAO = VL_MES1_REALIZADO -VL_MES1_ORCADO
       
    SET
                
    VL_PERCENTUAL = VL_MES1_REALIZADO / VL_MES1_ORCADO

    END

     

    ELSE
    BEGIN
    SET
              
    VL_VARIACAO = VL_MES1_REALIZADO - VL_MES1_FORECAST,
    SET
               
    VL_PERCENTUAL = VL_MES1_REALIZADO /VL_MES1_FORECAST
    END
    FROM

    #TB_RESULTADO RES

     

    INNER JOIN (
    SELECT CD_CONTA, SUM(ISNULL(VL_FORECAST,0)) AS TOT_FORECAST, SUM(ISNULL(VL_ORCADO,0)) ASTOT_ORCADO
         FROM PLANEJAMENTO.DBO.TB_SOLIC_ORCAMENTO_DADOS SOD
               WHERE
                    MONTH(DT_REFERENCIA) = @MESREF AND YEAR(DT_REFERENCIA) =@ANO
         GROUP BY CD_CONTA) ASVAL
                    ON RES.CD_CONTA = VAL.CD_CONTA

     

    Mas tbm está dando erro de sintaxe.

     

    Alguem pode me ajudar?

     

    Obrigado

    quarta-feira, 13 de julho de 2011 14:21

Respostas

  • Consegui fazer.

    Segue o resultado

     

    UPDATE

    #TB_RESULTADO

     

    SET VL_VARIACAO = CASE WHEN VL_MES1_FORECAST = '0,00'

     

    THEN VL_MES1_REALIZADO - VL_MES1_ORCADO

     

    ELSE VL_MES1_REALIZADO / VL_MES1_ORCADO

     

    END
     
    quarta-feira, 13 de julho de 2011 15:29

Todas as Respostas

  • Rodrigo teste este script

    UPDATE #TB_RESULTADO 
    SET VL_VARIACAO = CASE WHEN VL_MES1_FORECAST = 0 THEN VL_MES1_REALIZADO - VL_MES1_ORCADO ELSE VL_MES1_REALIZADO - VL_MES1_FORECAST END
    ,VL_PERCENTUAL = CASE WHEN VL_MES1_FORECAST = 0 THEN VL_MES1_REALIZADO / VL_MES1_ORCADO ELSE VL_MES1_REALIZADO /VL_MES1_FORECAST END
    
    
    

     

    Att.
    Marcelo Fernandes


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

    quarta-feira, 13 de julho de 2011 14:43
  • Experimente mais ou menos desta forma:

     

    UPDATE #TB_RESULTADO SET

      VL_VARIACAO = CASE WHEN VL_MES1_FORECAST = 0 THEN VL_MES1_REALIZADO - VL_MES1_ORCADO ELSE VL_VARIACAO END,

      VL_PERCENTUAL = CASE WHEN VL_MES1_FORECAST = 0 THEN VL_PERCENTUAL ELSE VL_MES1_REALIZADO / VL_MES1_ORCADO END

     

    Espero que seja útil.

     


    Assinatura: Imoveis comerciais em Guarulhos
    quarta-feira, 13 de julho de 2011 15:19
  • Consegui fazer.

    Segue o resultado

     

    UPDATE

    #TB_RESULTADO

     

    SET VL_VARIACAO = CASE WHEN VL_MES1_FORECAST = '0,00'

     

    THEN VL_MES1_REALIZADO - VL_MES1_ORCADO

     

    ELSE VL_MES1_REALIZADO / VL_MES1_ORCADO

     

    END
     
    quarta-feira, 13 de julho de 2011 15:29