Подсчет вхождений, если ячейка не нулевая - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть таблица, показанная ниже:

Code   Aug-19   Sep-19  Oct-19  Nov-19  Dec-19  Jan-20  Consistency
--------------------------------------------------------------------
ABC     NULL    501.2   584.56  NULL    NULL    NULL        NULL
DEF     NULL    NULL    NULL    260.4   222    323.77       NULL

Мне нужно взять вхождения в столбце месяцев и обновить столбец согласованности как

Code   Aug-19   Sep-19  Oct-19  Nov-19  Dec-19  Jan-20  Consistency
--------------------------------------------------------------------
ABC     NULL    501.2   584.56  NULL    NULL    NULL        2
DEF     NULL    NULL    NULL    260.4   222    323.77       3

Столбцы [Aug- 19], [19 сентября] ... являются динамическими c, которые будут меняться месяц за месяцем.

Как мне этого добиться?

1 Ответ

1 голос
/ 12 февраля 2020

Возможно, вам придется использовать уродливые выражения CASE здесь:

UPDATE yourTable
SET Consistency = CASE WHEN [Aug-19] IS NOT NULL THEN 1 ELSE 0 END +
                  CASE WHEN [Sep-19] IS NOT NULL THEN 1 ELSE 0 END +
                  CASE WHEN [Oct-19] IS NOT NULL THEN 1 ELSE 0 END +
                  CASE WHEN [Nov-19] IS NOT NULL THEN 1 ELSE 0 END +
                  CASE WHEN [Dec-19] IS NOT NULL THEN 1 ELSE 0 END +
                  CASE WHEN [Jan-20] IS NOT NULL THEN 1 ELSE 0 END;

Обратите внимание, что необходимость сделать это является серьезным признаком того, что ваш дизайн таблицы базы данных не оптимален. Было бы намного лучше просто поддерживать один столбец даты. Тогда для получения значения не NULL для каждого кода потребуется обычная операция GROUP BY. Рассмотрим таблицу, похожую на следующую:

Code | Date         | Val
ABC  | '2019-08-01' | NULL
ABC  | '2019-09-01' | 501.2
ABC  | '2019-10-01' | 584.56
ABC  | '2019-11-01' | NULL
ABC  | '2019-12-01' | NULL
ABC  | '2029-01-01' | NULL
DEF  | '2019-08-01' | NULL
DEF  | '2019-09-01' | NULL
DEF  | '2019-10-01' | NULL
DEF  | '2019-11-01' | 260.4
DEF  | '2019-12-01' | 222
DEF  | '2029-01-01' | 323.77

Теперь вам нужен только этот запрос:

SELECT
    Code,
    COUNT(Val) AS Consistency
FROM yourNewTable
GROUP BY
    Code;
...