sql server थोड़ा फ़ील्ड से दो अलग-अलग स्तंभों में सत्य/झूठी गिनती कैसे प्राप्त करें




sql-server tsql (5)

प्रयत्न:

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)

मुझे एक क्वेरी बनाने की आवश्यकता है जो एक बिट फ़ील्ड से दो अलग-अलग कॉलम में True (1) और झूठी (0) की संख्या को समेकित करेगी।

मैं 3 टेबल में शामिल हो रहा हूं और इसे कुछ ऐसा करने की आवश्यकता है:

विशेषता | कक्षा | पास | असफल

मैं विशेषता और कक्षा पर समूह कर रहा हूं।


कुछ इस तरह:

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

यह काम करता है (कम से कम एसक्यूएल 2008 में)

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

मैं पहली राशि में उत्तीर्ण होने के लिए 0 जोड़ रहा हूं क्योंकि बिट से int में कनवर्ट करने के एक छोटे से तरीके से आप सीधे बिट्स को जोड़ नहीं सकते हैं।


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

एक और विकल्प भी है:

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




bit