I have a table of members_id and Flags . I want to sum up how many flags a member_id has (like below). I have about 19 Flags which can have a 1 or 0 in the flag field . So basically I want to sum up the 1 in each column per 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
Desired Result
Member_Id | Total
999999b 4
777777a 3
答案 0 :(得分:5)
You could use:
SELECT Member_id, Flag1+Flag2+...+ Flag19 AS total
FROM tab;
If any column is nullable you have to handle it for example by using COALESCE
:
SELECT Member_id, COALESCE(Flag1,0) + COALESCE(Flag2,0) + ...
FROM tab;
答案 1 :(得分:0)
Select Member_id, sum(Flag1_Flag2_flag3+....Flag19) as Total_Flags from table group by Member_id;
答案 2 :(得分:0)
您可以尝试使用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 )
);
然后查询它并总结标志的值变得更容易。
希望这有帮助。