2012-06-14 48 views
31

我有一個表Emp具有這些行:如何在SQL Server 2005的表中找到多個列的總和?

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, Val3SUM和將在Total欄顯示。

+0

你也可以有作爲的總計算列。 –

回答

66

簡單:

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 
+7

請注意,如果第一個查詢的總和爲NULL是空值。 – Abris

+0

在第二個查詢中,如果所有行的'Valx'都爲空,則此查詢將中斷。 –

+0

對於null問題的一個簡單的解決方案是添加一個isnull函數 - SUM(isnull(val1,0))作爲'Val1' – Mordechai

17

就像一般的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 
+0

即使這一個也工作正常,但我不能標記你的答案,因爲只有一個我們可以標記爲答案...感謝您的迴應... –

28

你也必須意識到null記錄:

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

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

爲什麼你需要添加'Group By'和'SUM' ?,你只需要改變其中一個讓它變慢! )。 –

-1

另一個使用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 
+0

該問題要求每行輸入一次,而不僅僅是一個總計。 –

+0

現在的問題是:如何找到多列的總和? –

+0

是的,但它意味着總和在數學術語添加的東西。不像在獲得聚合行。 –

-1

使用trigges它會工作: -

- > CREATE TRIGGER TRIGGER_NAME BEFORE INSERT ON table_name的

FOR EACH ROW SET NEW.column_name3 = NEW.column_name1 +新建。column_name2;

時,你會在表中沒有的時候,你會更新表這樣一個章節目標 創建不同名稱的另一觸發和INSERT的位置使用UPDATE插入一行這隻會才起作用在上述語法

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; 

這將更新所有comumns

1

試試這個:

select sum(num_tax_amount+num_total_amount) from table_name; 
相關問題