2013-02-14 13 views
45

Potrzebuję uzyskać w sumie dwa pola, które znajdują się w tym samym wierszu i wprowadzić tę liczbę w polu na końcu tego samego wiersza.Jak SUMAĆ dwa pola w zapytaniu SQL

To jest mój kod.

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

Czy to co funkcja SUM jest stosowany do, lub można używać tylko funkcji SUM dla uzyskania łącznie kolumnie?

Dzięki

Odpowiedz

103

SUM jest funkcją agregującą. Oblicza sumę dla każdej grupy. + służy do obliczania dwóch lub więcej kolumn w rzędzie.

Rozważmy następujący przykład,

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 

spowoduje

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

 

SELECT ID, VALUE1 + VALUE2 
FROM TableName 

spowoduje

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

 

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

spowoduje

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

+1 za kompleksową odpowiedź – LuigiEdlCarno

+4

Ta odpowiedź nie jest skomplikowana, ale prosta i szczegółowa w razie potrzeby. Dobry! – Bitterblue

+1

dzięki za tę szczegółową odpowiedź –

5

SUM służy do sumowania wartości w kolumnie dla wielu wierszy. Możesz po prostu dodać kolumny do siebie:

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

Spróbuj wykonać następujące czynności:

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

konwersja do int może być również ważna, jeśli pola są varcharami zawierającymi ints – LuigiEdlCarno

4

Funkcja sumy otrzymuje tylko sumę kolumny. Aby podsumować dwie wartości z różnych kolumn, konwertować wartości do int i dodać je za pomocą + -Operator

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

nadzieję, że pomoże.

1

Jeśli chcesz dodać dwie kolumny razem, wszystko, co musisz zrobić, to je dodać. Otrzymasz sumę tych dwóch kolumn dla każdego wiersza zwróconego przez zapytanie.

To, co robi twój kod, to dodanie dwóch kolumn razem, a następnie uzyskanie sumy. To zadziała, ale może nie być to, co próbujesz osiągnąć.

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

Z uwagi na to, że moje punkty reputacji są mniejsze niż 50, nie mogę komentować ani głosować na powyższą odpowiedź E Coderera. Jest to najlepszy sposób na zrobienie tego, więc nie musisz używać grupy, ponieważ miałem podobny problem.
Wykonując SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0))) jako suma, otrzymasz numer, który chcesz, ale także pozbyć się błędu, ponieważ nie wykonujesz grupy. To było moje zapytanie i dało mi całkowitą liczbę i łączną kwotę dla każdego dealera, a następnie dało mi subtotal dla jakościowych i ryzykownych pożyczek dla dealerów.

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