Ответ 1
Что-то вроде этого:
SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass,
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail
Мне нужно создать запрос, который суммирует число 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
Я добавляю 0 к Первой в первой сумме как короткий способ преобразования из бит в int, так как вы не можете напрямую суммировать биты.
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
попробовать:
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
COUNT(CASE WHEN ColumnName = 1 THEN 1 END) Pass,
COUNT(CASE WHEN ColumnName = 0 THEN 1 END) Fail FROM YourTable
GROUP BY Attribute, Class