【问题标题】:Total sum of multiple columns in Oracle SQL Statement by unique IDOracle SQL 语句中多列的总和(按唯一 ID)
【发布时间】:2018-06-04 17:16:16
【问题描述】:

我有一个 members_id 和 Flags 表。我想总结一个 member_id 有多少个标志(如下所示)。我有大约 19 个标志,在标志字段中可以有 1 或 0。所以基本上我想总结每个 Member_Id 每一列中的 1

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

【问题讨论】:

  • 你可以规范化你的表格。
  • 您的 member_id 是唯一的吗?

标签: sql oracle sum unique multiple-columns


【解决方案1】:

你可以使用:

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

如果任何列可以为空,您必须处理它,例如使用 COALESCE:

SELECT Member_id, COALESCE(Flag1,0) + COALESCE(Flag2,0) + ...
FROM tab;

【讨论】:

  • 我确实做了上述操作,但我得到了一个 member_ids 列表,除了 1 之外,每个 member_id 的总数都是空的
  • @cardonas COALESCE 或 NVL。你可能有很多空值
  • 谢谢你,这就是问题所在。我确实做了 nvl 并得到了我需要的结果。
【解决方案2】:
Select Member_id, sum(Flag1_Flag2_flag3+....Flag19) as Total_Flags from table group by Member_id;

【讨论】:

    【解决方案3】:

    你可以试试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 )
    );
    

    然后查询它并对标志的值求和变得容易得多。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2022-07-08
      相关资源
      最近更新 更多