none
Seleccionar columnas no null RRS feed

  • Pregunta

  • Buen dia amigos, como puedo resolver lo siguiente:
    Tengo una tabla y algunos valores son NULL, esto cambia dinamicamente cada semana, aveces estan NULL, aveces tienen una cantidad, como puedo seleccionar los campos que sean diferente de NULL, por ejemplo asi:

    ASi tengo mi tabla en sql:

    Empleado  |  SUELDO  | BONO | FALTA  | RETARDO  | MULTA  |
    JOSE         |  1200      |   200  | NULL   | NULL        | 20         |     
    MARIO      |  1500      |  NULL  | NULL   |  30           | NULL    |               

             

    Asi quiero mi consulta, sin los campos NULL                                                                                    

    EMPLEADO  | SUELDO  | BONO  | RETARDO | MULTA
        JOSE      | 1200       | 200      |  -            | 20                                                                                        MARIO   |  1500      |    -       |   30          |  -





    miércoles, 19 de septiembre de 2018 14:27

Respuestas

  • Hola Marco Antonio Torres Hernández:

    Una solución puede ser eliminar las columnas de la tabla.

    Ej:

    /*
    solo para crear el escenario 
    create table tabEMP (empleado varchar (100), sueldo int, bono int, falta int, retardo int, multa int)
    go
    
    insert into tabEMP(empleado, sueldo, bono, falta, retardo, multa)
    values 
    ('JOSE',1200, 200, NULL, NULL, 20),
    ('MARIO',1500, NULL, NULL, 30, NULL)
    GO
    fin de creación del escenario
    */
    
    
    
    
    
    CREATE TABLE TEMPTABEMP
    (empleado VARCHAR(100),
     sueldo   INT,
     bono     INT,
     falta    INT,
     retardo  INT,
     multa    INT
    );
    WITH CTE
         AS (
         SELECT Empleado,
                SUELDO,
                SUM(BONO) AS BONO,
                SUM(FALTA) AS FALTA,
                SUM(RETARDO) AS RETARDO,
                SUM(MULTA) AS MULTA
         FROM tabEMP
         GROUP BY Empleado,
                  SUELDO)
         INSERT INTO TEMPTABEMP
                SELECT C.EMPLEADO,
                       C.SUELDO,
                       C.BONO,
                       C.FALTA,
                       C.RETARDO,
                       C.MULTA
                FROM CTE C;
    DECLARE @bono INT= 0;
    DECLARE @falta INT= 0;
    DECLARE @retardo INT= 0;
    DECLARE @multa INT= 0;
    SELECT @bono = SUM(bono),
           @falta = SUM(falta),
           @retardo = SUM(retardo),
           @multa = SUM(multa)
    FROM TEMPTABEMP;
    IF((@bono) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN bono;
        END;
    IF((@falta) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN falta;
        END;
    IF((@retardo) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN retardo;
        END;
    IF((@multa) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN multa;
        END;
    SELECT *
    FROM TEMPTABEMP;
    DROP TABLE TEMPTABEMP;
    
     
    

    Salida

    Un saludo

    miércoles, 19 de septiembre de 2018 20:14
  • Hola Marco,

    Sería algo así:

    SELECT EMPLEADO
    	,SUELDO
    	,ISNULL(BONO, '-') AS BONO
    	,ISNULL(RETARDO, '-') AS RETARDO
    	,ISNULL(MULTA, '-') AS MULTA
    FROM TU_TABLA

    Espero que te sirva.

    Un saludo,

    Diego


    miércoles, 19 de septiembre de 2018 14:58

Todas las respuestas

  • Hola Marco,

    Sería algo así:

    SELECT EMPLEADO
    	,SUELDO
    	,ISNULL(BONO, '-') AS BONO
    	,ISNULL(RETARDO, '-') AS RETARDO
    	,ISNULL(MULTA, '-') AS MULTA
    FROM TU_TABLA

    Espero que te sirva.

    Un saludo,

    Diego


    miércoles, 19 de septiembre de 2018 14:58
  • hola

    podrias usar el ISNULL() algo como esto

    SELECT Empleado, sueltdo, ISNULL(bono, '-'), ...., ISNULL(multa, '-') FROM Tabla

    ISNULL (Transact-SQL)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 19 de septiembre de 2018 15:00
  • Tal vez no me explique bien, eso me sirve para cambiar el null por un guion, pero lo que mas me interesa es seleccionar solo las columnas que no sean null en toda su corrida, por ejemplo si mi campo multas todos sus registros son null que no me lo muestre y si llega a contener almenos un registro diferente de null me muestre esa columna
    miércoles, 19 de septiembre de 2018 15:02
  • Hola Marco Antonio Torres Hernández:

    Una solución puede ser eliminar las columnas de la tabla.

    Ej:

    /*
    solo para crear el escenario 
    create table tabEMP (empleado varchar (100), sueldo int, bono int, falta int, retardo int, multa int)
    go
    
    insert into tabEMP(empleado, sueldo, bono, falta, retardo, multa)
    values 
    ('JOSE',1200, 200, NULL, NULL, 20),
    ('MARIO',1500, NULL, NULL, 30, NULL)
    GO
    fin de creación del escenario
    */
    
    
    
    
    
    CREATE TABLE TEMPTABEMP
    (empleado VARCHAR(100),
     sueldo   INT,
     bono     INT,
     falta    INT,
     retardo  INT,
     multa    INT
    );
    WITH CTE
         AS (
         SELECT Empleado,
                SUELDO,
                SUM(BONO) AS BONO,
                SUM(FALTA) AS FALTA,
                SUM(RETARDO) AS RETARDO,
                SUM(MULTA) AS MULTA
         FROM tabEMP
         GROUP BY Empleado,
                  SUELDO)
         INSERT INTO TEMPTABEMP
                SELECT C.EMPLEADO,
                       C.SUELDO,
                       C.BONO,
                       C.FALTA,
                       C.RETARDO,
                       C.MULTA
                FROM CTE C;
    DECLARE @bono INT= 0;
    DECLARE @falta INT= 0;
    DECLARE @retardo INT= 0;
    DECLARE @multa INT= 0;
    SELECT @bono = SUM(bono),
           @falta = SUM(falta),
           @retardo = SUM(retardo),
           @multa = SUM(multa)
    FROM TEMPTABEMP;
    IF((@bono) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN bono;
        END;
    IF((@falta) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN falta;
        END;
    IF((@retardo) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN retardo;
        END;
    IF((@multa) IS NULL)
        BEGIN
            ALTER TABLE temptabemp DROP COLUMN multa;
        END;
    SELECT *
    FROM TEMPTABEMP;
    DROP TABLE TEMPTABEMP;
    
     
    

    Salida

    Un saludo

    miércoles, 19 de septiembre de 2018 20:14