Как получить счет истины / ложи из битового поля в два отдельных столбца - PullRequest
37 голосов
/ 07 октября 2009

Мне нужно создать запрос, который будет суммировать число True (1) и False (0) в два отдельных столбца из одного битового поля.

Я объединяю 3 таблицы и мне нужно что-то вроде:

Атрибут | Класс | Пройти | Сбой

Я буду группировать по атрибутам и классам.

Ответы [ 6 ]

69 голосов
/ 07 октября 2009

Примерно так:

SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass, 
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail
12 голосов
/ 21 декабря 2010

Это работает (по крайней мере, в SQL 2008)

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

Я добавляю 0 к Переданному в первой сумме как краткий способ преобразования из бита в int, так как вы не можете напрямую суммировать биты.

3 голосов
/ 07 октября 2009

попробовать:

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)
3 голосов
/ 07 октября 2009
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
2 голосов
/ 07 октября 2009

Другой вариант будет

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
0 голосов
/ 10 марта 2018

есть еще один вариант:

SELECT 
   Attribute, 
   Class,
   COUNT(BoolColumnName = 1 or NULL) Pass,
   COUNT(BoolColumnName = 0 or NULL) Fail 
FROM Table
GROUP BY Attribute, Class
...