문제

True (1)과 False (0)의 수를 하나의 비트 필드에서 두 개의 개별 열에 합산하는 쿼리를 만들어야합니다.

나는 3 개의 테이블에 가입하고 다음과 같은 것과 같은 것이 필요합니다.

속성 | 클래스 | 패스 | 불합격

나는 속성과 클래스에 그룹화 할 것입니다.

도움이 되었습니까?

해결책

이 같은:

SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass, 
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail

다른 팁

이것은 작동합니다 (적어도 SQL 2008)

SELECT SUM(Passed + 0) PASS , SUM(1 - Passed) FAIL

비트에서 int로 변환하는 짧은 손으로 첫 번째 합계로 0을 추가하고 있습니다.

노력하다:

declare @table table (columnName bit)
insert into @table values (1)
insert into @table values (1)
insert into @table values (1)
insert into @table values (1)
insert into @table values (1)
insert into @table values (0)
insert into @table values (0)
insert into @table values (0)
insert into @table values (0)

SELECT
    SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS True1
  , SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END ) AS False0
from @Table

산출:

True1       False0
----------- -----------
5           4

(1 row(s) affected)
SELECT
    Attribute,
    Class,
    SUM(CASE BitField WHEN 1 THEN 1 ELSE 0 END) AS [Pass],
    SUM(CASE BitField WHEN 0 THEN 1 ELSE 0 END) AS [Fail]
FROM 
    Table
GROUP BY
    Attribute,
    Class

또 다른 옵션입니다

SELECT Attribute, Class
       COUNT(CASE WHEN ColumnName = 1 THEN 1 END) Pass,
       COUNT(CASE WHEN ColumnName = 0 THEN 1 END) Fail FROM YourTable 
GROUP BY Attribute, Class

하나 더 옵션이 있습니다.

SELECT 
   Attribute, 
   Class,
   COUNT(BoolColumnName = 1 or NULL) Pass,
   COUNT(BoolColumnName = 0 or NULL) Fail 
FROM Table
GROUP BY Attribute, Class
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top