计算多个列/行中的值实例(例如,' 4')

时间:2017-02-06 22:32:40

标签: sql sql-server count

我在SQL数据库中有调查回复。分数是1-5。

数据表的当前格式是:

Survey_id, Question_1, Question_2, Question_3
383838, 1,1,1
392384, 1,5,4
393894, 4,3,5

我正在运行一个新查询,我需要%4' s,%5' s问题并不重要,只是总体而言。

乍一看我在想

sum(iif(Question_1 =5,1,0)) + sum(iif(Question_2=5,1,0)) .... as total5s
sum(iif(Question_1=4,1,0)) + sum(iif(Question_2=4,1,0)) .... as total4s

但我不确定这是否是实现这一目标的最快捷或最优雅的方式。

编辑:嗯,在第一次测试时,此查询已经显示无法正常工作

EDIT2:我想在我的例子中需要总和而不是计数,会编辑。

1 个答案:

答案 0 :(得分:1)

您必须取消数据的显示并计算之后的%响应。由于问题数量有限,您可以使用union all取消数据的转移。

select 100.0*count(case when question=4 then 1 end)/count(*) as pct_4s
from (select survey_id,question_1 as question from tablename 
      union all
      select survey_id,question_2 from tablename 
      union all
      select survey_id,question_3 from tablename 
      ) responses

另一种方法可以是

select 100.0*(count(case when question_1=4 then 1 end)
              +count(case when question_2=4 then 1 end)
              +count(case when question_3=4 then 1 end))
       /(3*count(*))
from tablename

建议使用unpivot作为@Dudu,

with unpivoted as (select *
                   from tablename
                   unpivot (response for question in (question_1,question_2,question_3)) u
                   )
select 100.0*count(case when response=4 then 1 end)/count(*)
from unpivoted