Come ottenere il vero falso conteggio / da un campo di bit in due colonne separate
-
20-09-2019 - |
Domanda
Ho bisogno di creare una query che somma il numero di True (1) e falso (0) in due colonne separate dal campo di un bit.
Sono unendo 3 tavoli e bisogno di essere qualcosa di simile:
Attributo | Classe | passare | Fail
Sarò raggruppamento su Attribute e classe.
Soluzione
Qualcosa di simile a questo:
SUM(CASE WHEN ColumnName = 1 THEN 1 ELSE 0 END) AS Pass,
SUM(CASE WHEN ColumnName = 0 THEN 1 ELSE 0 END) AS Fail
Altri suggerimenti
Questo funziona (almeno in SQL 2008)
SELECT SUM(Passed + 0) PASS , SUM(1 - Passed) FAIL
Io sono l'aggiunta 0 al passato nella prima somma come un breve tratto mano di conversione da bit a int perché non si può sommare direttamente bit.
Prova:
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
USCITA:
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
Un'altra opzione sarebbe quella
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
non c'è ancora una possibilità di più:
SELECT
Attribute,
Class,
COUNT(BoolColumnName = 1 or NULL) Pass,
COUNT(BoolColumnName = 0 or NULL) Fail
FROM Table
GROUP BY Attribute, Class
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow