it-swarm.com.de

So erhalten Sie die True/False-Anzahl aus einem Bitfeld in zwei separate Spalten

Ich muss eine Abfrage erstellen, die die Anzahl von True (1) und False (0) in zwei separate Spalten aus einem Bitfeld summiert.

Ich schließe mich an drei Tischen an und brauche etwas, um so zu sein:

Attribut | Klasse | Pass | Scheitern

Ich werde nach Attribut und Klasse gruppieren.

35
avgbody

Etwas wie das:

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

Das funktioniert (zumindest in SQL 2008) 

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

Ich addiere 0 zu Passed in der ersten Summe als eine kurze Handmethode zum Konvertieren von Bit in Int, da Sie Bits nicht direkt summieren können.

12
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
3
Russ Cam

versuchen:

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

AUSGABE:

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

(1 row(s) affected)
3
KM.

Eine andere Option wäre

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
2
mrdenny

es gibt noch eine weitere Option:

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