Вы можете попробовать использовать 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 )
);
Тогда запрос к нему и суммирование значений флагов станет намного проще.
Надеюсь, это поможет.