2012-06-14 58 views
31

Tôi có một bảng Emp trong đó có các hàng:Làm thế nào để tìm tổng của nhiều cột trong một bảng trong 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 | 

Tôi muốn tìm SUM của Val1, Val2, Val3 và đó sẽ hiển thị trong cột Total.

+0

Bạn cũng có thể có Tổng số như tính toán cột. –

Trả lời

66

dễ dàng:

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

hoặc nếu bạn chỉ muốn một hàng:

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

Hãy coi chừng rằng tổng của truy vấn đầu tiên sẽ là NULL nếu trên của Val là VÔ GIÁ TRỊ. – Abris

+0

Trong truy vấn thứ hai, nếu 'Valx' là null cho tất cả các hàng, truy vấn này sẽ bị ngắt. –

+0

một giải pháp đơn giản cho vấn đề null là thêm một hàm isnull - SUM (isnull (val1,0)) là 'Val1' – Mordechai

17

Cũng giống như SELECT thông thường?

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

Hoặc bạn có muốn xác định tổng số và cập nhật bảng với các giá trị đó không?

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

Nếu bạn muốn có tổng số này là hiện tại mọi thời điểm - bạn nên có một cột tính toán trong bảng của bạn:

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

Sau đó, bạn sẽ luôn có được tổng số hiện nay - thậm chí nếu các giá trị thay đổi:

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

Ngay cả điều này cũng làm việc tốt nhưng tôi không thể đánh dấu câu trả lời của bạn là chỉ có một chúng tôi có thể đánh dấu là câu trả lời ... Cảm ơn phản ứng của bạn ... –

28

Bạn cũng phải được nhận thức của null hồ sơ:

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

Sử dụng 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

Tại sao bạn cần thêm 'Group By' Và' SUM' ?, Bạn chỉ cần thay đổi một trong số câu trả lời bằng cách làm cho nó chậm hơn! ;). –

-1

Một ví dụ sử dụng 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

Câu hỏi yêu cầu một mục nhập mỗi hàng, không chỉ một tổng số lớn. –

+0

Câu hỏi đặt ra là: Cách tìm tổng của nhiều cột? –

+0

Có, nhưng nó có nghĩa là tổng như trong thuật ngữ toán học để thêm mọi thứ. Không phải là nhận được một hàng tổng hợp. –

-1

sử dụng một trigges nó sẽ làm việc: -

-> CREATE TRIGGER TRIGGER_NAME TRƯỚC INSERT ON tên_bảng

FOR EACH ROW SET NEW.column_name3 = NEW.column_name1 + MỚI.column_name2;

này sẽ chỉ làm việc chỉ khi bạn sẽ chèn một hàng trong bảng không phải khi bạn sẽ được cập nhật bảng của bạn cho một pupose như vậy tạo ra một kích hoạt tên khác nhau và sử dụng CẬP NHẬT về nơi INSERT trong cú pháp trên

0

Chào bạn có thể sử dụng một truy vấn đơn giản,

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

trong trường hợp bạn cần phải chèn một hàng mới,

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

Để cập nhật,

update emp set total = val1+val2+val3; 

này sẽ cập nhật cho tất cả comumns

1

Hãy thử điều này:

select sum(num_tax_amount+num_total_amount) from table_name; 
Các vấn đề liên quan