我在SQL服务器上工作并对一些数据进行分析。下面是我的数据图片,包含46列。在图片中并没有显示所有列,但我希望你能了解它是如何形成的。 所有专栏都有"同意" "不同意"或者"在某种程度上同意"其中的数据。
现在我想得到"同意"所有列的逐行。新列totalagree将具有每列中连续数量达成一致的值。是否有任何SQL查询可以帮助我完成这项任务。
答案 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;
最后,您的数据模型很差。查询相对复杂的原因是因为您将数据放在单独的列中,这些列应位于不同的行中。您应该有一个表,每个实体一行,每个“课程计划”一个。查询会更简单。