Hoe vind je de som van meerdere kolommen in een tabel in SQL Server 2005?

Ik heb een tabel Empmet deze rijen:

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  |

Ik wil SUMvan Val1, Val2, Val3vinden en die wordt weergegeven in de kolom Total.


Antwoord 1, autoriteit 100%

Eenvoudig:

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

of als je maar één rij wilt:

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

Antwoord 2, autoriteit 36%

U moet ook op de hoogte zijn van null-records:

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

Gebruik van ISNULL:

ISNULL(col_Name, replace value)

Antwoord 3, autoriteit 21%

Net als een gewone SELECT?

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

Of wil je dat totaal bepalen en de tabel bijwerken met die waarden?

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

Als u wilt dat dit totaal altijd actueel is, moet u een berekende kolom in uw tabel hebben:

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

Dan krijgt u altijdhet huidige totaal – zelfs als de waarden veranderen:

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

Antwoord 4, autoriteit 4%

Probeer dit:

select sum(num_tax_amount+num_total_amount) from table_name;

Antwoord 5

Nog een voorbeeld met 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

Antwoord 6

Hallo, u kunt een eenvoudige zoekopdracht gebruiken,

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

Als u een nieuwe rij moet invoegen,

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

Om te updaten,

update emp set total = val1+val2+val3;

Dit wordt bijgewerkt voor alle comumns


Antwoord 7

Moest soortgelijk werk doen aan een Postgres db-tabel met null-waarde. Uiteindelijk een functie gemaakt omdat er te COALESCEzijn om toe te voegen.

CREATE OR REPLACE FUNCTION array_sum_float(float[])
    RETURNS float
AS
$$
DECLARE
    arrInts ALIAS FOR $1;
    sum int DEFAULT 0;
BEGIN
    FOR I IN ARRAY_LOWER(arrInts, 1)..ARRAY_UPPER(arrInts, 1)
        LOOP
            sum = sum + COALESCE(arrInts[I], 0);
        END LOOP;
    RETURN sum;
END;
$$
    LANGUAGE plpgsql;
SELECT array_sum_float(ARRAY [6,8, null, 2]);
SELECT array_sum_float(ARRAY [Val1, Val2, Val3]) from Emp;

Antwoord 8

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

Antwoord 9

gebruik een trigger, het zal werken:-

->CREER TRIGGER trigger_name VOORDAT INSERT ON table_name

VOOR ELKE RIJ SET NEW.column_name3 = NEW.column_name1 + NEW.column_name2;

dit werkt alleen wanneer u een rij invoegtin de tabel, niet wanneer u uw tabel voor een dergelijk doel gaat bijwerken
maak een andere trigger met een andere naam en gebruik UPDATEop de plaats van INSERTin de bovenstaande syntaxis

Other episodes