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.
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
Vous pouvez considérer 0 comme nul et simplement compter les valeurs restantes:
SELECT count(nullif(bitColumn, 0))
FROM MyTable;
Vous pouvez y parvenir en utilisant CONVERT
,
SELECT SUM(CONVERT(INT, bitColumn)) FROM MyTable
SELECT SUM (bitColumn * 1) FROM dbo.MyTable
Convertit le bit en int, par multiplication, propre et simple
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
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
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.