如何在SQLServer2005中查找表中多列的总和?

如何在SQLServer2005中查找表中多列的总和?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个表Emp,其中包含以下行: Emp_cd | Val1 | Val2 | Val3 | Total -------+-------+-------+-------+------- 1 | 1.23 | 2.23 | 3.43 | 2 | 23.03 | 12.23 | 2.92 | 3 | 7.23 | 9.05 | 13.43 | 4 | 03.21 | 78.23 | 9.43 | 我想找到Val1、Val2、Val3的

我有一个表
Emp
,其中包含以下行:

Emp_cd | Val1  | Val2  | Val3  | Total
-------+-------+-------+-------+-------
 1     | 1.23  | 2.23  | 3.43  | 
 2     | 23.03 | 12.23 | 2.92  |
 3     | 7.23  | 9.05  | 13.43 |
 4     | 03.21 | 78.23 | 9.43  |

我想找到
Val1、Val2、Val3的
SUM
,它将显示在
Total
列中。

就像常规的
选择一样

SELECT 
   Val1, Val2, Val3,
   Total = Val1 + Val2 + Val3
FROM dbo.Emp
还是要确定总数并用这些值更新表

UPDATE dbo.Emp
SET Total = Val1 + Val2 + Val3
如果要使此总计始终为当前值,则应在表中设置一个计算列:

ALTER TABLE dbo.Emp
ADD CurrentTotal AS Val1 + Val2 + Val3 PERSISTED
然后,您将始终获得当前总数-即使值发生变化:

SELECT 
   Val1, Val2, Val3, CurrentTotal
FROM dbo.Emp
简单:

或者,如果您只需要一行:

SELECT 
   SUM(Val1) as 'Val1',
   SUM(Val2) as 'Val2',
   SUM(Val3) as 'Val3',
   (SUM(Val1) + SUM(Val2) + SUM(Val3)) as 'Total'
FROM Emp

您还必须了解
null
记录:

SELECT  (ISNULL(Val1,0) + ISNULL(Val2,0) + ISNULL(Val3,0)) as 'Total'
FROM Emp
ISNULL的用法

ISNULL(col_Name, replace value)

另一个使用COALESCE的示例


使用触发器,它将工作:-

->在表名称上插入之前创建触发器名称

对于每行设置NEW.column\u name3=NEW.column\u name1+NEW.column\u name2

只有当您将在表中插入一行时,此操作才有效,而不是当您将更新表以获得此类权限时
创建另一个不同名称的触发器,并在上述语法的插入处使用更新

select emp_cd, val1, val2, val3,
(val1+val2+val3) as total 
from emp;
如果需要插入新行

insert into emp select emp_cd, val1, val2, val3,
(val1+val2+val3) as total 
from emp;
为了更新,

update emp set total = val1+val2+val3;
这将为所有组件更新,请尝试以下操作:

select sum(num_tax_amount+num_total_amount) from table_name;

需要在具有空值的Postgres db表上执行类似的工作。最后创建了一个函数,因为要添加的
合并
太多

创建或替换函数数组\u sum\u float(float[])
返回浮动
作为
$$
声明
arrInts ALIAS为$1;
sum int默认为0;
开始
对于数组中的I,下排(arrInts,1)…数组中的I,上排(arrInts,1)
环
求和=求和+合并(arrInts[I],0);
端环;
回报金额;
结束;
$$
语言plpgsql;
选择数组和浮点数(数组[6,8,null,2]);
从Emp中选择数组_sum_float(数组[Val1,Val2,Val3]);

即使这一个也很好,但我无法将您的答案标记为唯一我们可以标记为答案的答案。。。感谢您的回复…请注意,如果Val的on为NULL,则第一个查询的总和将为NULL。在第二个查询中,如果
Valx
对所有行都为NULL,则此查询将中断。NULL问题的一个简单解决方案是添加一个isnull函数-sum(isnull(val1,0))作为“val1”@aF动态列如何?
NVL(值,默认值)
可以在配置单元中使用,而不是
ISNULL
为什么需要添加
Group By
SUM
?,您只需通过使其变慢来更改其中一个答案即可!;)。您还可以将总数设为计算列。问题要求每行输入一项,不仅仅是一个总数。问题是:如何找到多列的和?是的,但它意味着和数学术语中的相加。与获取聚合行不同。如果您使用的是
mysql
,则需要使用
IFNULL()
,但如果val1、val2、val3中任何一个的值为null,则Total将为null,因此可以添加和条件,或者使用ISNULL(列名称,替换值)
insert into emp select emp_cd, val1, val2, val3,
(val1+val2+val3) as total 
from emp;
update emp set total = val1+val2+val3;
select sum(num_tax_amount+num_total_amount) from table_name;