none
Error en UPDATE RRS feed

  • Pregunta

  • Hola a todos;

    Tengo la consulta que pongo más abajo, en la que preciso que en el campo ImpDesv1(varchar) me anote si la desviación es 'ALTA', 'BAJA' o 'MEDIA'. Con la misma pretendo que de una tacada me calcule varias rows de un datagridview.

    La he puesto en el Sql Management y me está dando error de "Sintaxis incorrecta cerca de '='.

    A ver si me podéis indicar que es lo que tengo que corregir para que me funcione la misma. La consulta es más larga y com mas campos, pero sabiendo hacer uno los otros son muy parecidos.

    He sustituido en el analizador los parámetros por un valor y después ya le pondré los parámetros.

    UPDATE BalSitExpl SET ImpDesv1 = CASE WHEN PorcDesv1 = 0 Then 0 Else CASE WHEN PorcDesv1 < 2 Then ImpDesv1 = 'BAJA' Else CASE WHEN PorcDesv1 >= 8 Then ImpDesv1 = 'ALTA'  
      Else Case When ImpDesv1 = 'Media' Then End,End,End  WHERE Cod_Empresa = '851'

    Bueno, muchas gracias a todos.

    Gemma

    martes, 31 de enero de 2017 11:13

Respuestas

  • gemma_campillo,

    Pienso que no necesitas anidar una instrucción CASE:

    UPDATE BalSitExpl
    SET
        ImpDesv1 =	 CASE 
    				WHEN PorcDesv1 = 0 THEN '0'
    				WHEN PorcDesv1 < 2 THEN 'BAJA'
    				WHEN PorcDesv1 >= 8 THEN 'ALTA'
    				ELSE 'MEDIA'
                     END


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta gemma_campillo miércoles, 1 de febrero de 2017 10:00
    martes, 31 de enero de 2017 15:13
  • prueba así, el tema es que estas haciendo las asignaciones mas de una vez

    UPDATE BalSitExpl
      SET
          ImpDesv1 = CASE
                         WHEN PorcDesv1 = 0
                         THEN '0'
                         ELSE CASE
                                  WHEN PorcDesv1 < 2
                                  THEN 'BAJA'
                                  WHEN PorcDesv1 >= 8
                                  THEN 'ALTA'
                                  ELSE 'Media'
                              END
                     END
    WHERE Cod_Empresa = '851';


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta gemma_campillo martes, 31 de enero de 2017 14:03
    martes, 31 de enero de 2017 11:41
    Moderador

Todas las respuestas

  • prueba así, el tema es que estas haciendo las asignaciones mas de una vez

    UPDATE BalSitExpl
      SET
          ImpDesv1 = CASE
                         WHEN PorcDesv1 = 0
                         THEN '0'
                         ELSE CASE
                                  WHEN PorcDesv1 < 2
                                  THEN 'BAJA'
                                  WHEN PorcDesv1 >= 8
                                  THEN 'ALTA'
                                  ELSE 'Media'
                              END
                     END
    WHERE Cod_Empresa = '851';


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta gemma_campillo martes, 31 de enero de 2017 14:03
    martes, 31 de enero de 2017 11:41
    Moderador
  • Hola Miguel:

    Va perfecto, no era capaz de resolverla.

    Muchas gracias como siempre.

    Un cordial saludo.

    Gemma

    martes, 31 de enero de 2017 14:03
  • gemma_campillo,

    Pienso que no necesitas anidar una instrucción CASE:

    UPDATE BalSitExpl
    SET
        ImpDesv1 =	 CASE 
    				WHEN PorcDesv1 = 0 THEN '0'
    				WHEN PorcDesv1 < 2 THEN 'BAJA'
    				WHEN PorcDesv1 >= 8 THEN 'ALTA'
    				ELSE 'MEDIA'
                     END


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta gemma_campillo miércoles, 1 de febrero de 2017 10:00
    martes, 31 de enero de 2017 15:13