Wie finde ich die Summe mehrerer Spalten in einer Tabelle in SQL Server 2005?


74

Ich habe eine Tabelle Empmit folgenden Zeilen:

Emp_cd | Val1  | Val2  | Val3  | Total
-------+-------+-------+-------+-------
 1     | 1.23  | 2.23  | 3.43  | 
 2     | 23.03 | 12.23 | 2.92  |
 3     | 7.23  | 9.05  | 13.43 |
 4     | 03.21 | 78.23 | 9.43  |

Ich möchte finden SUMvon Val1, Val2, Val3und die in der zeigen wird TotalSpalte.


Sie können auch Total als berechnete Spalte verwenden.
Paresh J

Antworten:


128

Einfach:

SELECT 
   Val1,
   Val2,
   Val3,
   (Val1 + Val2 + Val3) as 'Total'
FROM Emp

oder wenn Sie nur eine Zeile möchten:

SELECT 
   SUM(Val1) as 'Val1',
   SUM(Val2) as 'Val2',
   SUM(Val3) as 'Val3',
   (SUM(Val1) + SUM(Val2) + SUM(Val3)) as 'Total'
FROM Emp

19
Beachten Sie, dass die Summe der ersten Abfrage NULL ist, wenn eines der Werte NULL ist.
Abris

2
Auch in der zweiten Abfrage Valxwird diese Abfrage unterbrochen, wenn sie für alle Zeilen null ist.
Isaac Kleinman

4
Eine einfache Lösung für das Nullproblem besteht darin, eine isnull-Funktion - SUM (isnull (val1,0)) als 'Val1'
Mordechai

@aF wie wäre es mit dynamischen Spalten?
Prashant Pimpale

1
NVL(value, default value)kann im Bienenstock anstelle vonISNULL
Safwan

47

Sie müssen auch über nullAufzeichnungen informiert sein:

SELECT  (ISNULL(Val1,0) + ISNULL(Val2,0) + ISNULL(Val3,0)) as 'Total'
FROM Emp

Verwendung von ISNULL:

ISNULL(col_Name, replace value)

2
Wenn Sie mit arbeiten mysql, müssen SieIFNULL()
Dexter

27

Nur als Stammgast SELECT?

SELECT 
   Val1, Val2, Val3,
   Total = Val1 + Val2 + Val3
FROM dbo.Emp

Oder möchten Sie diese Summe ermitteln und die Tabelle mit diesen Werten aktualisieren?

UPDATE dbo.Emp
SET Total = Val1 + Val2 + Val3

Wenn Sie möchten, dass diese Summe jederzeit aktuell ist, sollten Sie eine berechnete Spalte in Ihrer Tabelle haben:

ALTER TABLE dbo.Emp
ADD CurrentTotal AS Val1 + Val2 + Val3 PERSISTED

Dann erhalten Sie immer die aktuelle Summe - auch wenn sich die Werte ändern:

SELECT 
   Val1, Val2, Val3, CurrentTotal
FROM dbo.Emp

Auch diese funktioniert gut, aber ich kann Ihre Antwort nicht als eine markieren, die wir als Antwort markieren können ... Vielen Dank für Ihre Antwort ...
Tripati Subudhi

5

Versuche dies:

select sum(num_tax_amount+num_total_amount) from table_name;

0

Ein weiteres Beispiel mit COALESCE. http://sqlmag.com/t-sql/coalesce-vs-isnull

SELECT (COALESCE(SUM(val1),0) + COALESCE(SUM(val2), 0)
+ COALESCE(SUM(val3), 0) + COALESCE(SUM(val4), 0)) AS 'TOTAL'
FROM Emp

Die Frage fragt nach einem Eintrag pro Zeile, nicht nur nach einer Gesamtsumme.
Rob Farley

Die Frage ist: Wie finde ich die Summe mehrerer Spalten?
Diogo Rodrigues

Ja, aber es bedeutet Summe wie im mathematischen Begriff, Dinge hinzuzufügen. Nicht wie beim Abrufen einer aggregierten Zeile.
Rob Farley

0

Hallo, Sie können eine einfache Abfrage verwenden,

select emp_cd, val1, val2, val3,
(val1+val2+val3) as total 
from emp;

Falls Sie eine neue Zeile einfügen müssen,

insert into emp select emp_cd, val1, val2, val3,
(val1+val2+val3) as total 
from emp;

Um zu aktualisieren,

update emp set total = val1+val2+val3;

Dies wird für alle Herbst aktualisiert


Aber wenn der Wert nach einem der val1, val2, val3 ist null , dann wird insgesamt null sein, so fügen Sie entweder UND - Bedingung oder Verwendung ISNULL (column_name, replace_value)
Rupesh

-2
SELECT Emp_cd, Val1, Val2, Val3, SUM(Val1 + Val2 + Val3) AS TOTAL 
FROM Emp
GROUP BY Emp_cd, Val1, Val2, Val3

2
Warum müssen Sie Group ByAnd SUM? Hinzufügen ? Sie ändern einfach eine der Antworten, indem Sie sie langsamer machen! ;).
shA.t

-3

Verwenden Sie einen Trigger, es wird funktionieren: -

-> CREATE TRIGGER Triggername BEVOR INSERT ON Tabellenname

FÜR JEDEN REIHENSATZ NEW.column_name3 = NEW.column_name1 + NEW.column_name2;

Dies funktioniert nur, wenn Sie eine Zeile in eine Tabelle einfügen, nicht, wenn Sie Ihre Tabelle für eine solche Gruppe aktualisieren. Erstellen Sie einen weiteren Trigger mit einem anderen Namen und verwenden Sie UPDATE anstelle von INSERT in der obigen Syntax

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.