varios utiliza tablas sumar registros promedio diferentes contar consultas como columnas campos agrupados agrupadas sql sql-server tsql aggregate-functions

sql - utiliza - ¿Cómo puedo usar SUM para columnas de bits?



sumar dos campos en oracle (7)

¿Cómo se puede usar la función SUM () para columnas de bits en T-SQL?

Cuando intento hacerlo de la siguiente manera:

SELECT SUM(bitColumn) FROM MyTable;

Me sale el error

El bit de tipo de datos del operando no es válido para el operador de suma.


Algo crípticamente:

declare @Foo as Bit = 1; -- @Foo is a Bit. select SQL_Variant_Property( @Foo, ''BaseType'' ); -- But adding zero results in an expression with data type Int. select SQL_Variant_Property( @Foo + 0, ''BaseType'' ); select Sum( @Foo + 0 ); declare @Samples as Table ( Foo Bit ); insert into @Samples ( Foo ) values ( 0 ), ( 1 ), ( 0 ), ( 0 ), ( 1 ), ( 1 ), ( 1 ), ( 1 ); select Sum( Foo + 0 ) from @Samples;

Esto ciertamente no mejora la legibilidad o la capacidad de mantenimiento, pero es compacto.


Podría considerar 0 como nulos y simplemente contar los valores restantes:

SELECT count(nullif(bitColumn, 0)) FROM MyTable;


Podrías usar la función SIGN :

CREATE TABLE tab_x(b BIT); INSERT INTO tab_x(b) VALUES(1),(0),(0),(NULL),(0),(1); SELECT SUM(SIGN(b)) FROM tab_x; -- 2

Demostración de DBFiddle


Puede usar la función CAST y CONVERTIR para el tipo de datos a tipo de datos de número entero o entero.

Prueba este código de bloques:

SELECT SUM(CAST(bitColumn AS INT)) as bitColumn FROM MyTable

o

SELECT CONVERT(INT, bitColumn) FROM MyTable


SELECCIONAR SUMA (bitColumn * 1) DESDE dbo.MyTable

Convierte el bit en int, por multiplicación, limpio y simple.


Usted puede lograr mediante el uso de CONVERT ,

SELECT SUM(CONVERT(INT, bitColumn)) FROM MyTable


SELECT SUM(CAST(bitColumn AS INT)) FROM dbo.MyTable

necesidad de poner en número

u otra solución -

SELECT COUNT(*) FROM dbo.MyTable WHERE bitColumn = 1