sql-从多个表中获取同一列的总和

时间:2018-07-02 13:18:06

标签: sql sql-server select sum

我的数据库中有几个表。我们称它们为table1,table2,table3。 它们都有一个名为value的列。 我需要创建一个查询,该查询将返回一个数字,该数字是所有表中所有value列的总和... 我尝试了以下方法:

SELECT (SELECT SUM(value) FROM table1) + (SELECT SUM(value) FROM table2) + (SELECT SUM(value) FROM table3) as total_sum

但是,当内部SUM中的至少一个为NULL时,整个总值(此处为total_sum)为NULL,因此不是很值得信赖。 当某个内部SUM查询中没有值时,我需要它返回0,因此它不会影响其余SUM

为了更清楚一点,假设我有以下两个表:

TABLE1:

  ID  |  NAME  |  VALUE
   1    Name1     1000
   2    Name2     2000
   3    Name3     3000

TABLE2:

  ID  |  NAME  |  VALUE
   1    Name1     1500
   2    Name2     2500
   3    Name3     3500

最终,我需要的查询将返回一个值-13500,这是此处所有表的VALUE列下的所有值的总和。

所有其他列对于所需的查询都没有意义,在这种情况下,我什至不关心性能。

3 个答案:

答案 0 :(得分:2)

您可以使用Coalesce如下实现

SELECT 
    (SELECT coalesce(SUM(value),0) FROM table1) + 
    (SELECT coalesce(SUM(value),0) FROM table2) + 
    (SELECT coalesce(SUM(value),0) FROM table3) as total_sum

另一种方法是使用union all将所有值合并到单个表中

select distinct coalesce(sum(a.value), 0) as total_sum from
    (select value from table1
      union all
    select value from table 2
      union all
    select value from table 3) a;

答案 1 :(得分:0)

您可以使用ISNULL函数来处理NULL。

SELECT ISNULL((
                  SELECT SUM(value) FROM table1
              )
            , 0
             ) + ISNULL((
                            SELECT SUM(value) FROM table2
                        )
                      , 0
                       ) + ISNULL((
                                      SELECT SUM(value) FROM table3
                                  )
                                , 0
                                 ) AS total_sum;

答案 2 :(得分:0)

您可以简单地将它们全部加起来:

select sum(total) as Total
from (
select sum(value) as total from Table1
union all
select sum(value) as total from Table2
union all
select sum(value) as total from Table3 
) t;