none
Filtrar datos sin campos nulos RRS feed

  • Pregunta

  • Num_Empleado Fecha_Conducir Fecha_Salud Fecha_Conducta

    19811136 NULL NULL 2019-10-02 19813712 NULL NULL NULL 19858766 2017-10-27 NULL NULL 19898057 2020-10-21 NULL NULL 19952668 NULL NULL NULL 19958711 NULL NULL NULL 19974121 2021-10-04 NULL NULL 19975038 NULL NULL NULL 19989453 NULL NULL NULL 19994142 NULL NULL NULL 20002470 2022-10-28 NULL NULL 20005267 NULL NULL NULL 20015958 NULL NULL NULL

    Select t.num_empleado 
    , Case 
    When Month(t.Fecha_Vencimiento_Lic) = 10 Then t.Fecha_Vencimiento_Lic 
    Else Null 
    End As Fecha_Conducir 
    , Case 
    When Month(t.Fecha_Cert_Salud) = 10 Then t.Fecha_Cert_Salud 
    Else Null 
    End As Fecha_Salud 
    , Case 
    When Month(t.Fecha_Cert_Conducta) = 10 Then t.Fecha_Cert_Conducta 
    Else Null 
    End As Fecha_Conducta 
    From Empleado_Tabla As t 

    Tengo la siguiente consulta que hace muy bien el resultado que quiero pero quisiera que con un Where no listara los valores cuando los tres fueran NULL, si ven arriba hay empleados donde los tres valores son nulos y esos no quiero que salgan trate a mi manera pero no me salio

    From Empleado_Tabla as t where ...................

    jueves, 29 de octubre de 2020 15:52

Respuestas

  • Hola Efrain Diaz:

    CREATE TABLE dbo.Empleado_Tabla 
    (Num_Empleado INT, Fecha_Vencimiento_Lic DATE,    Fecha_Cert_Salud DATE, Fecha_Cert_Conducta DATE)
    GO
    
    Insert Into dbo.Empleado_Tabla(num_empleado
    							 , Fecha_Vencimiento_Lic
    							 , Fecha_Cert_Salud
    							 , Fecha_Cert_Conducta)
    Values
    	   ( 19811136, Null, Null, '2019-10-02' ),
    	   ( 19813712, Null, Null, Null ),
    	   ( 19858766, '2017-10-27', Null, Null ),
    	   ( 19898057, '2020-10-21', Null, Null ),
    	   ( 19952668, Null, Null, Null ),
    	   ( 19958711, Null, Null, Null ),
    	   ( 19974121, '2021-10-04', Null, Null ),
    	   ( 19975038, Null, Null, Null ),
    	   ( 19989453, Null, Null, Null ),
    	   ( 19994142, Null, Null, Null ),
    	   ( 20002470, '2022-10-28', Null, Null ),
    	   ( 20005267, Null, Null, Null ),
    	   ( 20015958, Null, Null, Null );
    GO

    La manera más simple es 

    Preguntar columna por columna: es null y Null y Null y todo ello negarlo.

    Select t.num_empleado 
    , Case 
    When Month(t.Fecha_Vencimiento_Lic) = 10 Then t.Fecha_Vencimiento_Lic 
    Else Null 
    End As Fecha_Conducir 
    , Case 
    When Month(t.Fecha_Cert_Salud) = 10 Then t.Fecha_Cert_Salud 
    Else Null 
    End As Fecha_Salud 
    , Case 
    When Month(t.Fecha_Cert_Conducta) = 10 Then t.Fecha_Cert_Conducta 
    Else Null 
    End As Fecha_Conducta 
    From Empleado_Tabla As t 
    WHERE 
    NOT (T.Fecha_Vencimiento_Lic IS NULL
    AND 
    T.Fecha_Cert_Salud IS NULL
    AND
    T.Fecha_Cert_Conducta IS NULL
    )

    También se puede hacer con un is not null or is not null or is not null

    Select t.num_empleado 
    , Case 
    When Month(t.Fecha_Vencimiento_Lic) = 10 Then t.Fecha_Vencimiento_Lic 
    Else Null 
    End As Fecha_Conducir 
    , Case 
    When Month(t.Fecha_Cert_Salud) = 10 Then t.Fecha_Cert_Salud 
    Else Null 
    End As Fecha_Salud 
    , Case 
    When Month(t.Fecha_Cert_Conducta) = 10 Then t.Fecha_Cert_Conducta 
    Else Null 
    End As Fecha_Conducta 
    From Empleado_Tabla As t 
    WHERE 
    (T.Fecha_Vencimiento_Lic IS not NULL
    or 
    T.Fecha_Cert_Salud IS not NULL
    or
    T.Fecha_Cert_Conducta IS not NULL
    )
     

    • Marcado como respuesta Efrain Diaz jueves, 29 de octubre de 2020 17:33
    jueves, 29 de octubre de 2020 16:37

Todas las respuestas

  • Hola Efrain Diaz:

    CREATE TABLE dbo.Empleado_Tabla 
    (Num_Empleado INT, Fecha_Vencimiento_Lic DATE,    Fecha_Cert_Salud DATE, Fecha_Cert_Conducta DATE)
    GO
    
    Insert Into dbo.Empleado_Tabla(num_empleado
    							 , Fecha_Vencimiento_Lic
    							 , Fecha_Cert_Salud
    							 , Fecha_Cert_Conducta)
    Values
    	   ( 19811136, Null, Null, '2019-10-02' ),
    	   ( 19813712, Null, Null, Null ),
    	   ( 19858766, '2017-10-27', Null, Null ),
    	   ( 19898057, '2020-10-21', Null, Null ),
    	   ( 19952668, Null, Null, Null ),
    	   ( 19958711, Null, Null, Null ),
    	   ( 19974121, '2021-10-04', Null, Null ),
    	   ( 19975038, Null, Null, Null ),
    	   ( 19989453, Null, Null, Null ),
    	   ( 19994142, Null, Null, Null ),
    	   ( 20002470, '2022-10-28', Null, Null ),
    	   ( 20005267, Null, Null, Null ),
    	   ( 20015958, Null, Null, Null );
    GO

    La manera más simple es 

    Preguntar columna por columna: es null y Null y Null y todo ello negarlo.

    Select t.num_empleado 
    , Case 
    When Month(t.Fecha_Vencimiento_Lic) = 10 Then t.Fecha_Vencimiento_Lic 
    Else Null 
    End As Fecha_Conducir 
    , Case 
    When Month(t.Fecha_Cert_Salud) = 10 Then t.Fecha_Cert_Salud 
    Else Null 
    End As Fecha_Salud 
    , Case 
    When Month(t.Fecha_Cert_Conducta) = 10 Then t.Fecha_Cert_Conducta 
    Else Null 
    End As Fecha_Conducta 
    From Empleado_Tabla As t 
    WHERE 
    NOT (T.Fecha_Vencimiento_Lic IS NULL
    AND 
    T.Fecha_Cert_Salud IS NULL
    AND
    T.Fecha_Cert_Conducta IS NULL
    )

    También se puede hacer con un is not null or is not null or is not null

    Select t.num_empleado 
    , Case 
    When Month(t.Fecha_Vencimiento_Lic) = 10 Then t.Fecha_Vencimiento_Lic 
    Else Null 
    End As Fecha_Conducir 
    , Case 
    When Month(t.Fecha_Cert_Salud) = 10 Then t.Fecha_Cert_Salud 
    Else Null 
    End As Fecha_Salud 
    , Case 
    When Month(t.Fecha_Cert_Conducta) = 10 Then t.Fecha_Cert_Conducta 
    Else Null 
    End As Fecha_Conducta 
    From Empleado_Tabla As t 
    WHERE 
    (T.Fecha_Vencimiento_Lic IS not NULL
    or 
    T.Fecha_Cert_Salud IS not NULL
    or
    T.Fecha_Cert_Conducta IS not NULL
    )
     

    • Marcado como respuesta Efrain Diaz jueves, 29 de octubre de 2020 17:33
    jueves, 29 de octubre de 2020 16:37
  • yo estaba haciendo lo mismo pero utilizando el and en vez del or muchas gracias a sido de gran ayuda para mi proyecto ultimamente
    jueves, 29 de octubre de 2020 17:32