programing

비트 열에 SUM을 사용하려면 어떻게 해야 합니까?

minimums 2023. 8. 6. 09:55
반응형

비트 열에 SUM을 사용하려면 어떻게 해야 합니까?

T-SQL의 비트 열에 SUM() 함수를 어떻게 사용할 수 있습니까?

다음과 같이 시도할 때:

SELECT SUM(bitColumn) FROM MyTable;

오류가 발생했습니다.

합계 연산자에 대한 피연산자 데이터 유형 비트가 잘못되었습니다.

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

수를 늘릴 필요가 있는

아니면 다른 해결책 -

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

비트를 곱셈을 통해 깨끗하고 단순한 int로 변환합니다.

0을 null로 간주하고 나머지 값만 계산할 수 있습니다.

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

다음을 사용하여 달성할 수 있습니다.CONVERT,

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

저의 개인적인 선호는CASE진술.

SELECT SUM(CASE WHEN bitColumn = 1 THEN 1 ELSE 0 END) FROM MyTable;

코드 압축을 정말로 좋아한다면,IIF.

SELECT SUM(IIF(bitColumn = 1, 1, 0)) FROM MyTable;

다음 기능을 사용할 수 있습니다.

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

DB Fidle 데모

CAST 및 CONVERT 함수를 사용하여 데이터 유형을 정수 또는 숫자 데이터 유형으로 변환할 수 있습니다.

다음 코드 블록을 사용해 보십시오.

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

또는

SELECT CONVERT(INT, bitColumn) 
FROM MyTable

다소 신비롭게도:

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;

이것은 확실히 가독성이나 유지보수성을 향상시키지는 않지만, 컴팩트합니다.

언급URL : https://stackoverflow.com/questions/33938599/how-can-i-use-sum-for-bit-columns

반응형