Je dois créer une requête qui additionnera le nombre de True (1) et de False (0) dans deux colonnes distinctes d'un champ de bits.
Je rejoins 3 tables et j'ai besoin que ce soit quelque chose comme:
Attribut | Classe | Pass | Échouer
Je vais regrouper sur Attribute et Class.
Quelque chose comme ça:
SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass,
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail
Cela fonctionne (au moins dans SQL 2008)
SELECT SUM(Passed + 0) PASS , SUM(1 - Passed) FAIL
J'ajoute 0 à Passed dans la première somme en tant que méthode simple de conversion de bit en int puisque vous ne pouvez pas additionner les bits directement.
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
essayer:
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
SORTIE:
True1 False0
----------- -----------
5 4
(1 row(s) affected)
Une autre option serait
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
il y a même une autre option:
SELECT
Attribute,
Class,
COUNT(BoolColumnName = 1 or NULL) Pass,
COUNT(BoolColumnName = 0 or NULL) Fail
FROM Table
GROUP BY Attribute, Class