2012-06-14 11 views
31

Mam tabeli Emp który ma te wiersze:Jak znaleźć sumę wielu kolumn w tabeli w 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 | 

Chcę znaleźć SUM z Val1, Val2, Val3 i które będą widoczne w kolumnie Total.

+0

Można również mieć całkowitą obliczonego kolumnie. –

Odpowiedz

66

proste:

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

lub jeśli chcesz tylko jeden wiersz:

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

Pamiętaj, że suma pierwszego zapytania będzie równa NULL, jeśli wartość parametru Val jest równa ZERO. – Abris

+0

Również w drugim zapytaniu, jeśli "Valx" ma wartość null dla wszystkich wierszy, zapytanie to zostanie przerwane. –

+0

prostym rozwiązaniem problemu zerowego jest dodanie funkcji isnull - SUM (isnull (val1,0)) jako "Val1" – Mordechai

17

Podobnie jak zwykły SELECT?

SELECT 
    Val1, Val2, Val3, 
    Total = Val1 + Val2 + Val3 
FROM dbo.Emp 

Czy chcesz określić, czy suma i zaktualizować tabelę z tymi wartościami?

UPDATE dbo.Emp 
SET Total = Val1 + Val2 + Val3 

Jeśli chcesz mieć ten całkowity być obecny przez cały czas - trzeba mieć kolumny obliczane w tabeli:

ALTER TABLE dbo.Emp 
ADD CurrentTotal AS Val1 + Val2 + Val3 PERSISTED 

Wtedy będzie zawsze uzyskać aktualny ogółem - nawet jeśli wartości zmienić:

SELECT 
    Val1, Val2, Val3, CurrentTotal 
FROM dbo.Emp 
+0

Nawet ta jedna działa również dobrze, ale nie mogę oznaczyć odpowiedzi jako jedynej, którą możemy oznaczyć jako odpowiedź ... Dziękujemy za odpowiedź ... –

28

Musisz mieć także świadomość null rekordów:

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

Wykorzystanie ISNULL:

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

Dlaczego musisz dodać 'Group By' i' SUM'? Po prostu zmień jedną z opcji odpowiedzi, dzięki czemu wolniej! ;). –

-1

Another przykład przy użyciu 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

Pytanie dotyczy wpisu w wierszu, a nie tylko jednej sumy całkowitej. –

+0

Pytanie brzmi: Jak znaleźć sumę wielu kolumn? –

+0

Tak, ale oznacza to sumę, jak w matematycznym wyrazie, aby dodawać rzeczy. Nie tak, jak w przypadku otrzymania zagregowanego wiersza. –

-1

użyć trigges to będzie działać: -

-> Utwórz TRIGGER trigger_name przed włożeniem ON table_name

dla każdego wiersza SET NEW.column_name3 = NEW.column_name1 + nowa.column_name2;

to będzie działać tylko dopiero wtedy, gdy będzie wstawić wiersz w tabeli nie kiedy będzie zaktualizowanie tabeli taki pupose utworzyć kolejny spust inną nazwą i użyć UPDATE na miejscu INSERT w powyższej składni

0

Hi można użyć prostego zapytania,

select emp_cd, val1, val2, val3, 
(val1+val2+val3) as total 
from emp; 

w przypadku trzeba wstawić nowy wiersz,

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

W celu aktualizacji,

update emp set total = val1+val2+val3; 

Spowoduje to aktualizację dla wszystkich comumns

1

Spróbuj tego:

select sum(num_tax_amount+num_total_amount) from table_name; 
Powiązane problemy