Общая сумма нескольких столбцов в Oracle SQL Statement по уникальному идентификатору - PullRequest
0 голосов
/ 04 июня 2018

У меня есть таблица members_id и Flags.Я хочу подвести итог, сколько флагов у member_id (как показано ниже).У меня есть около 19 флагов, которые могут иметь 1 или 0 в поле флага.Поэтому я хочу суммировать 1 в каждом столбце для каждого Member_Id

Member_Id | Flag2| Flag3| Flag4|Flag5|Flag6|Flag7|Flag8|
999999b     1        0      0    0     1       1      1    
777777a     0        1      1    0     1       0      0

Желаемый результат

Member_Id |  Total
999999b        4
777777a        3

Ответы [ 3 ]

0 голосов
/ 04 июня 2018
Select Member_id, sum(Flag1_Flag2_flag3+....Flag19) as Total_Flags from table group by Member_id;
0 голосов
/ 04 июня 2018

Вы можете попробовать использовать UNPIVOT:

SELECT member_id, SUM(COALESCE(flag_value, 0)) AS total_value FROM (
    SELECT member_id, flag_name, flag_value
      FROM (
        SELECT member_id, flag2, flag3, flag4, flag5, flag6, flag7, flag8 -- etc.
          FROM yourtable
    ) UNPIVOT (
        flag_value FOR flag_name IN
          ( flag2, flag3, flag4, flag5, flag6, flag7, flag8 )
    )
) GROUP BY member_id;

Вышеупомянутый подзапрос также показывает, как можно нормализовать данные в представлении, материализованном представлении или в новой таблице:

CREATE VIEW yourview AS
SELECT member_id, flag_name, flag_value
  FROM (
    SELECT member_id, flag2, flag3, flag4, flag5, flag6, flag7, flag8 -- etc.
      FROM yourtable
) UNPIVOT (
    flag_value FOR flag_name IN
      ( flag2, flag3, flag4, flag5, flag6, flag7, flag8 )
);

Тогда запрос к нему и суммирование значений флагов станет намного проще.

Надеюсь, это поможет.

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

Вы можете использовать:

SELECT Member_id, Flag1+Flag2+...+ Flag19 AS total
FROM tab;

Если какой-либо столбец обнуляем, вы должны обработать его, например, с помощью COALESCE:

SELECT Member_id, COALESCE(Flag1,0) + COALESCE(Flag2,0) + ...
FROM tab;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...