valores vacio sumar reemplazar preguntar por ejemplos campos cambiar buscar sql

sql - vacio - ¿Cómo obtengo el recuento de columnas de valor nulo por fila en un conjunto de retorno?



sql server preguntar por null (7)

Solución fea:

select Col1, Col2, case when Col1 is null then 1 else 0 end + case when Col2 is null then 1 else 0 end as Col3 from ( select ''A'' as Col1, ''B'' as Col2 union select ''A'', NULL union select NULL, NULL ) z

Esto regresa

Col1 Col2 Col3 NULL NULL 2 A NULL 1 A B 0

Estoy buscando una consulta que me devuelva una columna adicional al final de mi consulta actual, que es el recuento de todas las columnas dentro del conjunto de resultados que contienen una columna nula. Por ejemplo:

Col 1 - Col 2 - Col 3 A B 0 A NULL 1 NULL NULL 2

¿Hay una manera simple de obtener este conjunto de devolución basado en los valores de fila en lugar de tener que volver a consultar todos los criterios que obtienen las filas originales?


Oracle tiene una función NVL2 () que lo hace fácil.

select col1, col2, col3, ... NVL2(col1,0,1) +NVL2(col2,0,1) +NVL2(col3,0,1) coln from whatever


Puede usar la columna calculada:

CREATE TABLE testTable( col1 nchar(10) NULL, col2 nchar(10) NULL, col3 AS (case when col1 IS NULL then (1) else (0) end+case when col2 IS NULL then (1) else (0) end) )

No es una solución bonita, pero debería funcionar.

Si está tratando con una gran cantidad de columnas y muchas de ellas espera que sean NULL, podría usar columnas dispersas (disponibles en SQL Server 2008). Se optimizará para NULL y puede generar automáticamente una representación XML para cada fila de datos en la tabla.


Si no hay una muy buena razón por la que deba hacer esto en el SQL, simplemente debe hacer un ciclo for en el conjunto de resultados y contar los valores NULL vlues.

El costo va de n ^ n a n ..


Al igual que en una publicación similar, SQL no es muy adecuado para trabajar en diferentes columnas dentro de una fila, pero es mucho mejor para trabajar en filas.

Sugeriría convertir la tabla en hechos ''individuales'' sobre una fila, por ejemplo

select <key>, col1 as value From aTable UNION select <key>, col2 as value From aTable UNION ... and so on for the other columns to be summed.

Esto se puede convertir en una vista, es decir,

create view aView as (select as above).

Entonces la respuesta correcta es solo

select key, count(*) from aView where value is null Group By key


create table TEST ( a VARCHAR2(10), b VARCHAR2(10), c VARCHAR2(10) ); insert into TEST (a, b, c) values (''jas'', ''abhi'', ''shail''); insert into TEST (a, b, c) values (null, ''abhi'', ''shail''); insert into TEST (a, b, c) values (''jas'', null, ''shail''); insert into TEST (a, b, c) values (''jas'', ''abhi'', null); insert into TEST (a, b, c) values (''jas'', ''abhi'', ''abc|xyz''); insert into TEST (a, b, c) values (''jas'', ''abhi'', ''abc|xyz''); insert into TEST (a, b, c) values (''jas'', ''abhi'', ''abc|xyz''); insert into TEST (a, b, c) values (null, ''abhi'', ''abc|xyz''); commit; select sum(nvl2(a,null,1)),sum(nvl2(b,null,1)),sum(nvl2(c,null,1)) from test where a is null or b is null or c is null order by 1,2,3


select count(*) - count(ColumnName) as NumberOfNulls from yourTable

devuelve el número de nulos en la columna específica. Si haces esto para cada columna, puedes obtener esa información.