So summieren Sie zwei Felder in einer SQL-Abfrage

83

Ich muss die Summe von zwei Feldern erhalten, die sich in derselben Zeile befinden, und diese Nummer in ein Feld am Ende derselben Zeile eingeben.

Das ist mein Code.

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

Wird dafür die SUMME-Funktion verwendet, oder können Sie die SUMME-Funktion nur zum Abrufen der Gesamtsumme einer Spalte verwenden?

Vielen Dank

Anton Hughes
quelle

Antworten:

204

SUMist eine Aggregatfunktion. Es wird die Summe für jede Gruppe berechnet. +wird zum Berechnen von zwei oder mehr Spalten in einer Zeile verwendet.

Betrachten Sie dieses Beispiel,

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

wird resultieren

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

 

SELECT  ID, VALUE1 + VALUE2
FROM    TableName

wird resultieren

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

 

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

wird resultieren

ID, SUM(VALUE1 + VALUE2)
1   7
2   16
John Woo
quelle
10
Diese Antwort ist nicht komplex, sondern einfach und so detailliert wie nötig. Gut!
Bitterblue
1
Kudos John, möglicherweise der beste Weg, um diese Frage zu beantworten!
Abhijit
29

Versuche Folgendes:

SELECT *, (FieldA + FieldB) AS Sum
FROM Table
Obl Tobl
quelle
Die Konvertierung in int könnte ebenfalls wichtig sein, wenn die Felder varchars sind, die ints enthalten
LuigiEdlCarno
@Obl Tobl Ich möchte die Summe der Spalten, die dynamisch ist
Prashant Pimpale
7

SUM wird verwendet, um den Wert in einer Spalte für mehrere Zeilen zu summieren. Sie können einfach Ihre Spalten addieren:

select tblExportVertexCompliance.TotalDaysOnIncivek + tblExportVertexCompliance.IncivekDaysOtherSource AS [Total Days on Incivek]
Daniel Kelley
quelle
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 Codierer
quelle
5

Da meine Reputationspunkte unter 50 liegen, konnte ich die Antwort von E Coder oben nicht kommentieren oder dafür stimmen. Dies ist der beste Weg, damit Sie die Gruppe nicht verwenden müssen, da ich ein ähnliches Problem hatte.
Wenn Sie " SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0)))Total" ausführen, erhalten Sie die gewünschte Nummer, aber Sie werden auch von Fehlern befreit, wenn Sie keine Gruppierung nach durchführen. Dies war meine Anfrage und gab mir eine Gesamtzahl und einen Gesamtbetrag für jeden Händler und gab mir dann eine Zwischensumme für hochwertige und riskante Händlerkredite.

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
quelle
4

Die Summenfunktion erhält nur die Summe einer Spalte. Um zwei Werte aus verschiedenen Spalten zu summieren, konvertieren Sie die Werte in int und addieren Sie sie mit dem + -Operator

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

Hoffentlich hilft das.

LuigiEdlCarno
quelle
3

Wenn Sie zwei Spalten zusammenfügen möchten, müssen Sie sie nur hinzufügen. Dann erhalten Sie die Summe dieser beiden Spalten für jede von der Abfrage zurückgegebene Zeile.

Ihr Code addiert die beiden Spalten und erhält dann eine Summe der Summen. Das wird funktionieren, aber es ist möglicherweise nicht das, was Sie erreichen möchten.

Dan Bracuk
quelle
3

Nur eine Erinnerung zum Hinzufügen von Spalten. Wenn einer der Werte NULL ist, wird die Summe dieser Spalten zu NULL. Deshalb haben einige Poster empfohlen, sich mit dem zweiten Parameter 0 zusammenzuschließen

Ich weiß, dass dies ein älterer Beitrag war, wollte ihn aber der Vollständigkeit halber hinzufügen.

Barb Dawdy
quelle