获取所有具有一致数据的列的总和

时间:2018-05-22 10:47:29

标签: sql sql-server

我在SQL服务器上工作并对一些数据进行分析。下面是我的数据图片,包含46列。在图片中并没有显示所有列,但我希望你能了解它是如何形成的。 所有专栏都有"同意" "不同意"或者"在某种程度上同意"其中的数据。 enter image description here

现在我想得到"同意"所有列的逐行。新列totalagree将具有每列中连续数量达成一致的值。是否有任何SQL查询可以帮助我完成这项任务。

1 个答案:

答案 0 :(得分:2)

一种方法是巨型case表达式:

select . . .,
       ( (case when col1 = 'agree' then 1 else 0 end) +
         (case when col2 = 'agree' then 1 else 0 end) +
         . . . 
       ) as total_agree

如果您想要计算更多此类列,则可以取消数据并重新聚合:

select t.*, total_agree
from t cross apply
     (select count(*) as total_agree
      from (values ('col1', col1), ('col2', col2), . . .
           ) v(which, val)
      where val = 'agree'
     ) v;

最后,您的数据模型很差。查询相对复杂的原因是因为您将数据放在单独的列中,这些列应位于不同的行中。您应该有一个表,每个实体一行,每个“课程计划”一个。查询会更简单。