Cách TÓM TẮT hai trường trong một truy vấn SQL


84

Tôi cần lấy tổng hai trường nằm trong cùng một hàng và nhập số đó vào một trường ở cuối cùng hàng đó.

Đây là mã của tôi.

Sum(tbl1.fld1 + tbl1.fld2) AS [Total]

Đây có phải là hàm SUM được sử dụng hay bạn chỉ có thể sử dụng hàm SUM để nhận tổng của một cột?

Cảm ơn

Câu trả lời:


204

SUMlà một hàm tổng hợp. Nó sẽ tính tổng cho mỗi nhóm. +được sử dụng để tính toán hai hoặc nhiều cột trong một hàng.

Hãy xem xét ví dụ này,

ID  VALUE1  VALUE2
===================
1   1       2
1   2       2
2   3       4
2   4       5

 

SELECT  ID, SUM(VALUE1), SUM(VALUE2)
FROM    tableName
GROUP   BY ID

sẽ kết quả

ID, SUM(VALUE1), SUM(VALUE2)
1   3           4
2   7           9

 

SELECT  ID, VALUE1 + VALUE2
FROM    TableName

sẽ kết quả

ID, VALUE1 + VALUE2
1   3
1   4
2   7
2   9

 

SELECT  ID, SUM(VALUE1 + VALUE2)
FROM    tableName
GROUP   BY ID

sẽ kết quả

ID, SUM(VALUE1 + VALUE2)
1   7
2   16

10
Câu trả lời này không phức tạp nhưng đơn giản và chi tiết khi cần thiết. Tốt!
Bitterblue

1
Kudos John, có thể là cách tốt nhất để trả lời câu hỏi này!
Abhijit

29

Hãy thử những cách sau:

SELECT *, (FieldA + FieldB) AS Sum
FROM Table

chuyển đổi sang int có thể là quan trọng quá, nếu các lĩnh vực đang varchars ints chứa
LuigiEdlCarno

@Obl Tobl Tôi muốn tổng của cột đó là năng động
Prashant Pimpale

7

SUM được sử dụng để tính tổng giá trị trong một cột cho nhiều hàng. Bạn chỉ có thể thêm các cột của mình lại với nhau:

select tblExportVertexCompliance.TotalDaysOnIncivek + tblExportVertexCompliance.IncivekDaysOtherSource AS [Total Days on Incivek]

7
ID  VALUE1  VALUE2
===================
1   1       2

1   2       2
2   3       4
2   4       5

select ID, (coalesce(VALUE1 ,0) + coalesce(VALUE2 ,0) as Total from TableName

5

Do điểm danh tiếng của tôi dưới 50, tôi không thể bình luận hoặc bình chọn cho câu trả lời của E Coder ở trên. Đây là cách tốt nhất để làm điều đó để bạn không phải sử dụng nhóm như tôi đã gặp vấn đề tương tự.
Bằng cách thực hiện SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0)))như Total, điều này sẽ giúp bạn có được số lượng bạn muốn nhưng cũng giúp bạn thoát khỏi bất kỳ lỗi nào do không thực hiện Group By. Đây là truy vấn của tôi và cung cấp cho tôi tổng số và tổng số tiền cho mỗi đại lý và sau đó đưa cho tôi tổng phụ cho các khoản vay đại lý Chất lượng và Rủi ro.

SELECT 
    DISTINCT STEP1.DEALER_NBR
    ,COUNT(*) AS DLR_TOT_CNT
    ,SUM((COALESCE(DLR_QLTY,0))+(COALESCE(DLR_RISKY,0))) AS DLR_TOT_AMT
    ,COUNT(STEP1.DLR_QLTY) AS DLR_QLTY_CNT
    ,SUM(STEP1.DLR_QLTY) AS DLR_QLTY_AMT
    ,COUNT(STEP1.DLR_RISKY) AS DLR_RISKY_CNT
    ,SUM(STEP1.DLR_RISKY) AS DLR_RISKY_AMT
    FROM STEP1
    WHERE DLR_QLTY IS NOT NULL OR DLR_RISKY IS NOT NULL
        GROUP BY STEP1.DEALER_NBR

4

Hàm sum chỉ lấy tổng của một cột. Để tính tổng hai giá trị từ các cột khác nhau, hãy chuyển đổi các giá trị thành int và cộng chúng lại bằng cách sử dụng + -Operator

Select (convert(int, col1)+convert(int, col2)) as summed from tbl1

Hy vọng rằng sẽ giúp.


3

Nếu bạn muốn thêm hai cột với nhau, tất cả những gì bạn phải làm là thêm chúng. Sau đó, bạn sẽ nhận được tổng của hai cột đó cho mỗi hàng được trả về bởi truy vấn.

Những gì mã của bạn đang làm là thêm hai cột với nhau và sau đó nhận được một tổng của các tổng. Điều đó sẽ hiệu quả, nhưng nó có thể không phải là điều bạn đang cố gắng hoàn thành.


3

Chỉ là một lời nhắc nhở về việc thêm cột. Nếu một trong các giá trị là NULL thì tổng các cột đó sẽ trở thành NULL. Vì vậy, tại sao một số áp phích đã khuyến nghị kết hợp với tham số thứ hai là 0

Tôi biết đây là một bài đăng cũ hơn nhưng muốn thêm điều này cho hoàn chỉnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.