Saltar al contenido

Extraer filas de una tabla, que incluyen menos de x NULL

Revisamos de forma cada tutorial de nuestra web con el objetivo de mostrarte siempre la información más veraz y actual.

Solución:

Los permisos para crear una tabla en la base de datos actual no deberían impedirle crear una con la que pueda trabajar. Simplemente puede crear una tabla #temp:

CREATE TABLE #test123(
    c1 float,
    c2 float,
    c3 float,
    c4 float,
    c5 float
);

INSERT #test123(c1,c2,c3,c4,c5);
VALUES (2,3,NULL,1,2),
       (2,NULL,NULL,1,2),
       (2,3,NULL,NULL,2),
       (NULL,3,NULL,1,NULL),
       (2,3,NULL,1,2);

para ver porque ISNULL no es efectivo aquí, ejecute esta consulta:

SELECT ISNULL(c1,1), ISNULL(c2,1), ISNULL(c3,1), ISNULL(c4,1), ISNULL(c5,1)
  FROM #test123;

Le ha dado un valor a cada columna en cada fila. Entonces, ahora está evaluando la SUMA de valores inflados y evaluando erróneamente una propiedad del valor real (¿qué sucede cuando uno de los valores es negativo?), En lugar de evaluar el CONTEO de valores que son NULOS o NO NULOS.

Es más código, pero una forma sencilla de abordar esto es:

SELECT * FROM #test123
  WHERE CASE WHEN c1 IS NULL THEN 1 ELSE 0 END
      + CASE WHEN c2 IS NULL THEN 1 ELSE 0 END
      + CASE WHEN c3 IS NULL THEN 1 ELSE 0 END
      + CASE WHEN c4 IS NULL THEN 1 ELSE 0 END
      + CASE WHEN c5 IS NULL THEN 1 ELSE 0 END < 2;

Debe usar una declaración de caso como esta:

SELECT * 
FROM test123 
WHERE (
    (CASE WHEN C1 IS NULL THEN 1 ELSE 0 END + 
     CASE WHEN C2 IS NULL THEN 1 ELSE 0 END + 
     CASE WHEN C3 IS NULL THEN 1 ELSE 0 END + 
     CASE WHEN C4 IS NULL THEN 1 ELSE 0 END + 
     CASE WHEN C5 IS NULL THEN 1 ELSE 0 END) 
    < 2);

los ISNULL el enfoque es devolver sus valores reales cuando el valor no es NULLque empuja todas las filas sobre la marca 2.

Sección de Reseñas y Valoraciones

Eres capaz de añadir valor a nuestro contenido informacional contribuyendo tu experiencia en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *