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

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

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

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]

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

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

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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.