Требуется нормализация в запросе SQL - PullRequest
0 голосов
/ 25 июня 2018

У меня есть таблица данных учеников, в которой есть 20 столбцов, в которых

мне нужно написать условие для каждого столбца, как это

SELECT
    registered, Appeared, registered + Appeared AS col3 
FROM
    (SELECT 
     COUNT(REGDNO) AS registered, branch_code,
     SUM(CASE WHEN SUB1_GRADE <> 'Ab' AND SUB1_GRADE IS NOT NULL OR
                   SUB2_GRADE <> 'Ab' AND SUB1_GRADE IS NOT NULL OR
                   SUB2_GRADE <> 'Ab ' AND SUB2_GRADE IS NOT NULL OR
                   SUB3_GRADE <> 'Ab' AND SUB3_GRADE IS NOT NULL OR 
                   SUB4_GRADE <> 'Ab' AND SUB4_GRADE IS NOT NULL OR  
                   SUB5_GRADE <> 'Ab' AND SUB5_GRADE IS NOT NULL OR 
                   SUB6_GRADE <> 'Ab' AND SUB6_GRADE IS NOT NULL OR 
                   SUB7_GRADE <> 'Ab' AND SUB7_GRADE IS NOT NULL .........

Есть ли более простой способ, пожалуйста, помогите мне, пожалуйста

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Использование unpivot, чтобы проверить, заполнен ли какой-либо из столбцов и <> 'Ab'.Обратите внимание, что <> 'Ab' возвращает false для Nulls в любом случае:

create table rr (a char(2), b char(2), c char(2), d char(2), e char(2), f char(2))

insert into rr values (null,'aa',null,null,'ac','ab')

Select sum(iif(u.[cols]<>'AB', 1,0))
from rr s
unpivot
(
  [cols]
  for [vals] in (a, b, c, d, e, f)
) u;
0 голосов
/ 25 июня 2018

Вы можете использовать unpivot, чтобы превратить все ваши столбцы в один столбец оценки, а затем применить условие к этому одному столбцу.

Я не знаком с синтаксом sql-сервера (и сейчас не могу его протестировать), но в postgres, например, было бы так:

select sum(colvalue) from (
  select
    unnest(array['col1', 'col2', 'col3']) as colname,
    unnest(array[col1, col2, col3]) as colvalue
  from my_table) x
where colvalue <> 'Ab' and colvalue is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...