Wie die Wahr / Falsch-Zählwert von einem Bit-Feld in zwei getrennte Spalten erhalten
-
20-09-2019 - |
Frage
Ich brauche eine Abfrage zu erstellen, die die Anzahl von True (1) und False (0) in zwei getrennten Spalten von einem Bit-Feld wird summieren.
Ich bin bei 3 Tischen und muß es so etwas wie sein:
Attribut | Klasse | Pass | Ausfallen
Ich werde auf Attribute und Klasse werden gruppiert.
Lösung
So etwas wie folgt aus:
SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass,
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail
Andere Tipps
Das funktioniert (zumindest in SQL 2008)
SELECT SUM(Passed + 0) PASS , SUM(1 - Passed) FAIL
Ich addiere 0 in der ersten Summe als kurze Hand Weg Bestanden zu dem von Bit zu int konvertieren, da Sie nicht Bits Summe direkt können.
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
OUTPUT:
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
Eine andere Möglichkeit 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
gibt es 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow