كيفية الحصول على / عدد كاذبة صحيح من حقل بت في عمودين منفصلين

StackOverflow https://stackoverflow.com/questions/1533106

سؤال

وأحتاج لإنشاء استعلام التي سيتم جمعها من عدد صحيح (1) و False (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

نصائح أخرى

وهذا يعمل (على الأقل في SQL 2008)

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

وأنا مضيفا 0 إلى مرت في مجموع أول وسيلة اليد قصيرة تحويل من بت لكثافة العمليات لأنك لا تستطيع خلاصة القول بت مباشرة.

ومحاولة:

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

وثمة خيار آخر يتمثل

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

وهناك حتى خيار واحد أكثر من ذلك:

SELECT 
   Attribute, 
   Class,
   COUNT(BoolColumnName = 1 or NULL) Pass,
   COUNT(BoolColumnName = 0 or NULL) Fail 
FROM Table
GROUP BY Attribute, Class
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top