为SQL提供条件的最佳方法

时间:2011-10-13 20:37:24

标签: 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
  3. 好的,现在这里的表是变量。

    enter image description here

    这是我的查询,我需要将所有条件放在查询中,我该怎么做?

    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 个答案:

答案 0 :(得分:1)

您可以利用NOT IN和IN运算符。

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