如何在SQL Server 2005中查找表中多个列的总和?


74

我有一个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  |

我想找到SUMVal1, Val2, Val3,并且将在显示Total列。


您也可以将“总计”作为“计算列”。
Paresh J

Answers:


129

简单:

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

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

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

20
请注意,如果Val的on为NULL,则第一个查询的总和将为NULL。
Abris 2014年

2
同样在第二个查询中,如果Valx所有行都为null,则此查询将中断。
艾萨克·克莱曼

4
解决null问题的简单方法是添加一个isull函数-SUM(isnull(val1,0))作为'Val1'–
Mordechai

@aF动态列如何?
Prashant Pimpale

1
NVL(value, default value)可以在蜂巢中使用,而不是ISNULL
Safwan

47

您还必须注意null记录:

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

用途ISNULL

ISNULL(col_Name, replace value)

2
如果您正在使用,mysql则需要使用IFNULL()
Dexter

27

像普通人一样SELECT吗?

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

即使是这个也能正常工作,但我不能将您的答案标记为只有我们可以将其标记为答案...感谢您的回复...
Tripati Subudhi 2012年

5

尝试这个:

select sum(num_tax_amount+num_total_amount) from table_name;

0

使用COALESCE的另一个示例。http://sqlmag.com/t-sql/coalesce-vs-isnull

SELECT (COALESCE(SUM(val1),0) + COALESCE(SUM(val2), 0)
+ COALESCE(SUM(val3), 0) + COALESCE(SUM(val4), 0)) AS 'TOTAL'
FROM Emp

该问题要求每行有一个条目,而不仅仅是一个总计。
罗布·法利

问题是:如何找到多列之和?
Diogo Rodrigues

是的,但这意味着在数学上加总和。不像获取汇总行。
罗布·法利

0

嗨,您可以使用一个简单的查询,

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;

这将更新所有公社


但是,如果val1,val2,val3中任何一个的值为null,则Total将为null,因此添加AND条件或使用ISNULL(column_name,replace_value)
Rupesh

-2
SELECT Emp_cd, Val1, Val2, Val3, SUM(Val1 + Val2 + Val3) AS TOTAL 
FROM Emp
GROUP BY Emp_cd, Val1, Val2, Val3

2
为什么需要添加Group ByAnd SUM?,您只需通过使其变慢来更改答案之一即可!;)。
shA.t 2015年

-3

使用触发将起作用:-

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

对于每个行集NEW.column_name3 = NEW.column_name1 + NEW.column_name2;

这仅在您将表插入一行时才起作用,而不会在为此目的更新表时创建另一个不同名称的触发器,并以上述语法在INSERT位置使用UPDATE

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.