Principales respuestas
Seleccionar columnas no null

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 | -
- Editado Marco Antonio Torres Hernandez miércoles, 19 de septiembre de 2018 14:31 Error de dedo
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
- Marcado como respuesta Pablo RubioModerator lunes, 24 de septiembre de 2018 15:26
-
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
- Marcado como respuesta Pablo RubioModerator lunes, 24 de septiembre de 2018 15:26
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
- Marcado como respuesta Pablo RubioModerator lunes, 24 de septiembre de 2018 15:26
-
hola
podrias usar el ISNULL() algo como esto
SELECT Empleado, sueltdo, ISNULL(bono, '-'), ...., ISNULL(multa, '-') FROM Tabla
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
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
-
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
- Marcado como respuesta Pablo RubioModerator lunes, 24 de septiembre de 2018 15:26