Jak sumować dwa pola w zapytaniu SQL

88

Muszę uzyskać sumę dwóch pól znajdujących się w tym samym wierszu i wprowadzić tę liczbę w polu na końcu tego samego wiersza.

To jest mój kod.

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

Czy do tego służy funkcja SUMA, czy też można użyć funkcji SUMA tylko do uzyskania sumy z kolumny?

Dzięki

Anton Hughes
źródło

Odpowiedzi:

212

SUMjest funkcją agregującą. Obliczy sumę dla każdej grupy. +służy do obliczania dwóch lub więcej kolumn w wierszu.

Rozważ ten 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

skutkuje

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

 

SELECT  ID, VALUE1 + VALUE2
FROM    TableName

skutkuje

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

 

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

skutkuje

ID, SUM(VALUE1 + VALUE2)
1   7
2   16
John Woo
źródło
11
Ta odpowiedź nie jest złożona, ale prosta i tak szczegółowa, jak potrzeba. Dobry!
Bitterblue
1
Kudos John, prawdopodobnie najlepszy sposób na odpowiedź na to pytanie!
Abhijit
30

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

SELECT *, (FieldA + FieldB) AS Sum
FROM Table
Obl Tobl
źródło
konwersja na int może być również ważna, jeśli pola są varcharami zawierającymi
ints
@Obl Tobl Chcę, aby suma kolumn była dynamiczna
Prashant Pimpale
Panie, uratowałeś mi życie.
WhySoSerious
7

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

select tblExportVertexCompliance.TotalDaysOnIncivek + tblExportVertexCompliance.IncivekDaysOtherSource AS [Total Days on Incivek]
Daniel Kelley
źródło
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
E Coder
źródło
5

Ponieważ moje punkty reputacji są mniejsze niż 50, nie mogłem komentować ani głosować na odpowiedź E Codera powyżej. To najlepszy sposób, aby to zrobić, więc nie musisz używać grupy przez, ponieważ miałem podobny problem.
Wykonując SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0)))jako Suma, uzyskasz żądaną liczbę, ale także pozbędziesz się jakiegokolwiek błędu związanego z niewykonaniem Grupowania według. To było moje zapytanie i dało mi całkowitą liczbę i łączną kwotę dla każdego dealera, a następnie podał mi sumę częściową dotyczącą jakości i ryzykownych pożyczek dealerskich.

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
CelticCoder
źródło
4

Funkcja sum pobiera tylko sumę kolumny. Aby zsumować dwie wartości z różnych kolumn, zamień wartości na int i dodaj je za pomocą + -Operator

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

Mam nadzieję, że to pomoże.

LuigiEdlCarno
źródło
4

Przypomnienie o dodawaniu kolumn. Jeśli jedna z wartości jest równa NULL, suma tych kolumn staje się NULL. Dlatego niektóre plakaty zalecają łączenie się z drugim parametrem równym 0

Wiem, że to był starszy post, ale chciałem to dodać dla kompletności.

Barb Dawdy
źródło
Dzięki Barb, obok coalesce można też użyć ISNULL. Na przykład ISNULL ((wartość_1), 0) + ISNULL ((wartość_2), 0)
Horbaje
3

Jeśli chcesz dodać dwie kolumny razem, wystarczy je dodać. Następnie 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 do siebie, a następnie uzyskanie sumy sum. To zadziała, ale może nie być tym, co próbujesz osiągnąć.

Dan Bracuk
źródło