web-dev-qa-db-ja.com

ビット列にSUMを使用するにはどうすればよいですか?

T-SQLのビット列にSUM()関数を使用するにはどうすればよいですか?

私が以下のようにしようとすると:

SELECT SUM(bitColumn) FROM MyTable;

エラーが表示されます:

オペランドデータ型ビットは、合計演算子では無効です。

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

数字にキャストする必要があります

または別の解決策-

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

0をヌルと見なし、残りの値を単純にカウントできます。

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

CONVERTを使用して達成できます。

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

SELECT SUM(bitColumn * 1)FROM dbo.MyTable

乗算により、ビットを整数に変換します。クリーンでシンプルです。

2
SSS

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

DBFiddle Demo

1
Lukasz Szozda

データ型から整数または数値データ型へのCASTおよびCONVERT関数を使用できます。

このコードブロックを試してください。

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

または

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

やや不可解な:

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;

これは確かに読みやすさや保守性を改善しませんが、コンパクトです。

0
HABO