Come SOMMARE due campi all'interno di una query SQL


88

Devo ottenere il totale di due campi che si trovano nella stessa riga e inserire quel numero in un campo alla fine della stessa riga.

Questo è il mio codice.

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

È per questo che viene utilizzata la funzione SOMMA o puoi utilizzare solo la funzione SOMMA per ottenere il totale di una colonna?

Grazie

Risposte:


212

SUMè una funzione aggregata. Calcolerà il totale per ogni gruppo. +viene utilizzato per calcolare due o più colonne in una riga.

Considera questo esempio,

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

risulterà

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

 

SELECT  ID, VALUE1 + VALUE2
FROM    TableName

risulterà

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

 

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

risulterà

ID, SUM(VALUE1 + VALUE2)
1   7
2   16

11
Questa risposta non è complessa ma semplice e dettagliata quanto necessario. Buono!
Bitterblue

1
Complimenti John, forse il modo migliore per rispondere a questa domanda!
Abhijit

30

Prova quanto segue:

SELECT *, (FieldA + FieldB) AS Sum
FROM Table

anche la conversione in int potrebbe essere importante, se i campi sono varchar contenenti int
LuigiEdlCarno

@Obl Tobl Voglio la somma delle colonne che è dinamica
Prashant Pimpale

signore, mi ha salvato la vita.
WhySoSerious

7

SUM viene utilizzato per sommare il valore in una colonna per più righe. Puoi semplicemente aggiungere le tue colonne insieme:

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

Poiché i miei punti reputazione sono inferiori a 50, non ho potuto commentare o votare per la risposta di E Coder sopra. Questo è il modo migliore per farlo in modo da non dover utilizzare il gruppo perché ho avuto un problema simile.
Facendo SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0)))come Totale, otterrai il numero che desideri ma ti libererai anche da qualsiasi errore per non aver eseguito un Gruppo per. Questa era la mia domanda e mi ha dato un conteggio totale e un importo totale per ogni rivenditore e poi mi ha dato un totale parziale per i prestiti del rivenditore di qualità e rischiosi.

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

La funzione sum ottiene solo il totale di una colonna. Per sommare due valori da colonne diverse, convertire i valori in int e sommarli utilizzando + -Operator

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

Spero possa aiutare.


4

Solo un promemoria sull'aggiunta di colonne. Se uno dei valori è NULL, il totale di quelle colonne diventa NULL. Ecco perché alcuni poster hanno raccomandato di fondersi con il secondo parametro 0

So che questo era un post precedente ma volevo aggiungerlo per completezza.


Grazie Barb, oltre a coalesce si può usare anche ISNULL. Ad esempio, ISNULL ((value_1), 0) + ISNULL ((value_2), 0)
Horbaje

3

Se vuoi aggiungere due colonne insieme, tutto ciò che devi fare è aggiungerle. Quindi otterrai la somma di queste due colonne per ogni riga restituita dalla query.

Quello che sta facendo il tuo codice è aggiungere le due colonne e quindi ottenere una somma delle somme. Funzionerà, ma potrebbe non essere ciò che stai tentando di ottenere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.