True(1) と False(0) の数を 1 つのビット フィールドから 2 つの別々の列に合計するクエリを作成する必要があります。
私は3つのテーブルに参加していますが、次のようなものにする必要があります:
属性 | クラス | 合格 | 失敗
属性とクラスでグループ化します。
True(1) と False(0) の数を 1 つのビット フィールドから 2 つの別々の列に合計するクエリを作成する必要があります。
私は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 に変換する簡単な方法として、最初の合計で Passed に 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
もう1つのオプションがあります:
SELECT
Attribute,
Class,
COUNT(BoolColumnName = 1 or NULL) Pass,
COUNT(BoolColumnName = 0 or NULL) Fail
FROM Table
GROUP BY Attribute, Class