Лучший способ задать условие для SQL

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

Мне нужно сделать запрос для предоставления некоторых условий.

Например: если c_Fk_CodCiiu4 равен 0112.01 или 0126.01, то ti_Fk_CodUnidadMedida должно быть = 01 или 02 или 03. В той же таблице, если c_Fk_CodCiiu4 равен 0113.01 или 0113.2, тогда ti_Fk_CodUnidadMedida должно быть = 14 или 17 или 19. В той же таблице, если c_Fk_CodCiiu4 равен 0114.01 Или 0114.02 или 0114.03, тогда ti_Fk_CodUnidadMedida должен быть = 01 или 19 или 17 …. и т.д.

У меня также есть два других условия:

  1. Если c_Fk_IdBoleta = 45550711
  2. Если sembrado.si_Fk_IdDesglose = desglose.si_Pk_IdDesglose

Хорошо, теперь вот таблицы, в которых находятся эти переменные.

введите описание изображения здесь

И вот мой запрос, в котором мне нужно поместить все условия внутри запроса, как я могу это сделать?

 SELECT 
 'Pregunta (12).Cultivo Anual' as Numero_Pregunta,
 c_Fk_IdBoleta as Numero_Boleta,
 'La unidad de medida, no corresponde al tipo de cultivo.' as Detalle_Error,
 sembrado.si_Pk_NumSiembra   
  FROM
    Clt_Sembrado as sembrado, Clt_Desglose as desglose        
   WHERE ((sembrado.c_Fk_IdBoleta = 45550711)
   AND(sembrado.si_Fk_IdDesglose = desglose.si_Pk_IdDesglose) 
       AND (c_Fk_CodCiiu4 LIKE
       CASE WHEN (c_Fk_CodCiiu4 = 0112.01 
                 OR c_Fk_CodCiiu4 = 0126.01)
                 AND
                 (sembrado.ti_Fk_CodUnidadMedida <> 1
                 OR sembrado.ti_Fk_CodUnidadMedida <> 2
                 OR sembrado.ti_Fk_CodUnidadMedida <> 3
                 OR sembrado.ti_Fk_CodUnidadMedida <> 8)

                 THEN NULL))

                 ELSE 

                   ((desglose.c_Fk_CodCiiu4 = 0113.01
                    OR desglose.c_Fk_CodCiiu4 = 0113.02)
                    AND(sembrado.ti_Fk_CodUnidadMedida <> 14
                    OR sembrado.ti_Fk_CodUnidadMedida <> 17
                    OR sembrado.ti_Fk_CodUnidadMedida <> 19)))

                 ELSE 

                   ((desglose.c_Fk_CodCiiu4 = 0114.01
                    OR desglose.c_Fk_CodCiiu4 = 0114.02)
                    AND(sembrado.ti_Fk_CodUnidadMedida <> 1
                    OR sembrado.ti_Fk_CodUnidadMedida <> 19
                    OR sembrado.ti_Fk_CodUnidadMedida <> 17)))
  

Ответ №1:

Вы можете воспользоваться операторами NOT IN и IN .

 AND(sembrado.ti_Fk_CodUnidadMedida NOT IN (1, 19, 17)