请教大佬怎么写个SQL语句获取12字段中的0与1个数

图片说明

select DIAOCJG1, DIAOCJG2, DIAOCJG3, DIAOCJG4, DIAOCJG5, DIAOCJG6, DIAOCJG7, DIAOCJG8, DIAOCJG9, DIAOCJG10, DIAOCJG11, DIAOCJG12, DIAOCJG13, DIAOCJG14, DIAOCJG15, DIAOCJG16, DIAOCJG17, DIAOCJG18, DIAOCJG19, DIAOCJG20
from table1
怎么操作这个20个字段获取1与0的个数

可以使用Case when,例如:

SELECT
(SUM(CASE WHEN def1=1 THEN 1 ELSE 0 END) +
SUM(CASE WHEN def2=1 THEN 1 ELSE 0 END) +
SUM(CASE WHEN def3=1 THEN 1 ELSE 0 END)) yi,
(SUM(CASE WHEN def1=0 THEN 1 ELSE 0 END) +
SUM(CASE WHEN def2=0 THEN 1 ELSE 0 END) +
SUM(CASE WHEN def3=0 THEN 1 ELSE 0 END)) ling
FROM stu;

外面再包一层 where = 0 然后 count一下

按照我的理解,你是想获得这20列中,值为0或值为1 的所有记录的个数。
那么以下的语句,应该是可以实现的:
select count(*) from table1 t where t.DIAOCJG1 in (0,1) or t.DIAOCJG2 in (0,1) or .......把20个列的筛选条件都写上
但是我不知道是否还有更简洁高效的语句,希望知道的可以帮题主解答

1/ 按行统计
把你的sql语句的逗号改为+号,得到的应该是每一行各列相加之后的数值,即为1的个数,剩下的是0的个数。
类似 : select t1+t2+t3+t4 from test;

2/ 整表统计
select sum(t1+t2+t3+t4) from test;

select sum(case when 字段a ='1' then 1 else 0) from table ;

用case when then end 语句就可以啦,不清楚你建这张表时有没有创建视图,所以这个语句需要把所有的列字段名都写上

select (sum(case when 列字段a=1 then 1 else 0 end ) +
sum(case when 列字段b=1 then 1 else 0 end ) +
sum(case when 列字段c=1 then 1 else 0 end ) ) 1的个数,
(sum(case when 列字段a=0 then 1 else 0 end ) +
sum(case when 列字段b=0 then 1 else 0 end ) +
sum(case when 列字段c=0 then 1 else 0 end ) ) 0的个数
from table;

(SELECT 'A1' as name,A1 as num,count(0) as cnt FROM table1 where A1 in (0,1) GROUP by A1) UNION ALL
(SELECT 'A2',A2,count(0) as cnt FROM table1 where A2 in (0,1) GROUP by A2 ) UNION ALL
(SELECT 'A3',A3,count(0) as cnt FROM table1 where A3 in (0,1) GROUP by A3 ) UNION ALL
(SELECT 'A4',A4,count(0) as cnt FROM table1 where A4 in (0,1) GROUP by A4 )

select
count (case when num=1 then 1 else 0 end) count1,
count (case when num=0 then 1 else 0 end) count0
from

(select DIAOCJG1 as num from table1
union all
select DIAOCJG2 as num from table1
...

把20个字段相加,结果就是1的数量,用20减去1的数量,就是0的数量。