如何在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;