Получите общее количество всех столбцов, которые согласны с данными в них

zain ul abidin спросил: 28 апреля 2018 в 09:07 в: sql

Я работаю на SQL-сервере и делаю анализ некоторых данных. Ниже приведена картина моих данных, состоящая из 46 столбцов. На картинке отображаются не все столбцы, но я надеюсь, что вы получаете представление о том, как это происходит. Все столбцы имеют "соглашаться" "не соглашаться" или "соглашаться в какой-то мере" данные в них.

Теперь я хочу получить общее число" согласен "по строкам всех столбцов. Новый столбец totalagree будет иметь значение того, сколько из них согласен в строке в каждом столбце. Есть ли SQL-запрос, который может помочь мне в достижении этой задачи.


1 ответ

Есть решение
Gordon Linoff ответил: 28 апреля 2018 в 09:08

Один из методов - это гигантское выражение case:

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

Если у вас больше таких столбцов, которые вы хотите рассчитать, то вы можете отключить данные и re-aggregate:

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;

Наконец, у вас плохая модель данных. Причина, по которой запросы относительно сложны, состоит в том, что у вас есть данные в отдельных столбцах, которые должны быть в отдельных строках. У вас должна быть таблица с одной строкой на сущность и одна на "план урока". Запросы будут проще.

zain ul abidin ответил: 28 апреля 2018 в 03:45
бэтмен .....