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.

Tripati Subudhi
quelle
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
aF.
quelle
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)
Salem Ahmed
quelle
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
marc_s
quelle
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;
Kamran
quelle
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
Diogo Rodrigues
quelle
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

Jim Macaulay
quelle
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
Rakesh Anand
quelle
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

Yogesh
quelle