web-dev-qa-db-fra.com

Comment puis-je utiliser SUM pour les colonnes de bits?

Comment utiliser la fonction SUM () pour les colonnes de bits dans T-SQL?

Quand j'essaye de le faire comme ci-dessous:

SELECT SUM(bitColumn) FROM MyTable;

Je reçois l'erreur:

Le bit de type de données d'opérande n'est pas valide pour l'opérateur de somme.

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

besoin de mouler en nombre

ou une autre solution -

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

Vous pouvez considérer 0 comme nul et simplement compter les valeurs restantes:

SELECT count(nullif(bitColumn, 0))
FROM MyTable;
14
t-clausen.dk

Vous pouvez y parvenir en utilisant CONVERT,

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

SELECT SUM (bitColumn * 1) FROM dbo.MyTable

Convertit le bit en int, par multiplication, propre et simple

2
SSS

Vous pouvez utiliser la fonction 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

Démo DBFiddle

1
Lukasz Szozda

Vous pouvez utiliser la fonction CAST et CONVERT pour le type de données en type de données entier ou numérique.

Essayez ces blocs de code:

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

ou

SELECT CONVERT(INT, bitColumn) 
FROM MyTable
1
ilhan kaya

Un peu cryptiquement:

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;

Cela n'améliore certainement pas la lisibilité ou la maintenabilité, mais il est compact.

0
HABO