40

True(1) と False(0) の数を 1 つのビット フィールドから 2 つの別々の列に合計するクエリを作成する必要があります。

私は3つのテーブルに参加していますが、次のようなものにする必要があります:

属性 | クラス | 合格 | 失敗

属性とクラスでグループ化します。

4

6 に答える 6

76

このようなもの:

SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass, 
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail
于 2009-10-07T17:42:40.230 に答える
13

これは機能します(少なくともSQL 2008では)

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

ビットを直接合計することはできないため、ビットから int に変換する簡単な方法として、最初の合計で Passed に 0 を追加しています。

于 2010-12-21T20:39:02.940 に答える
3

試す:

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)
于 2009-10-07T17:48:36.363 に答える
3
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
于 2009-10-07T17:45:49.003 に答える
2

別のオプションは

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
于 2009-10-07T17:45:48.523 に答える
0

もう1つのオプションがあります:

SELECT 
   Attribute, 
   Class,
   COUNT(BoolColumnName = 1 or NULL) Pass,
   COUNT(BoolColumnName = 0 or NULL) Fail 
FROM Table
GROUP BY Attribute, Class
于 2018-03-10T11:41:25.443 に答える