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
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