sql >> Database teknologi >  >> RDS >> Sqlserver

SUM-funktionen tilføjes ikke korrekt

Jeg er ikke sikker på din datatype. Men se følgende eksempler på returnerede værdier. I MSSQL 2012 ser din situation ud til at svare til datatypen REAL. Mens PENGE, FLOAT, DECIMAL, DOBBELT PRÆCISION retur 72200,00 RIGTIG returnerer 72199.9998321533. Se nedenfor:

CREATE TABLE #tempso (Amount money, GRPS int);

INSERT INTO #tempso(Amount, GRPS) VALUES
('65025.00',355),
('-2500.00',355),
('7014.40',355),
('725.62',355),
('241.67',355),
('1209.57',355),
('241.87',355),
('241.87',355)

SELECT GRPS,SUM(Amount) AS AMT FROM #tempso GROUP BY  GRPS

ALTER TABLE #tempso ALTER COLUMN Amount float
SELECT GRPS,SUM(Amount) AS AMT FROM #tempso GROUP BY  GRPS

ALTER TABLE #tempso ALTER COLUMN Amount decimal(10,2)
SELECT GRPS,SUM(Amount) AS AMT FROM #tempso GROUP BY  GRPS

ALTER TABLE #tempso ALTER COLUMN Amount DOUBLE PRECISION
SELECT GRPS,SUM(Amount) AS AMT FROM #tempso GROUP BY  GRPS

        --------------- 
RETURNS:|355 72200.00 |
        ---------------

ALTER TABLE #tempso ALTER COLUMN Amount REAL
SELECT GRPS,SUM(Amount) AS AMT FROM #tempso GROUP BY  GRPS

        ----------------------  
RETURNS:|355 72199.9998321533 |
        ----------------------

DROP TABLE #tempso

Du ønsker måske at ændre kolonnens datatype (hvis det ikke er en ønsket type, er den måske indstillet ved en fejl fra rullemenuen i SQL Studio osv.) eller CAST værdien som en af ​​ovenstående datatyper, hvilket vil returnere den ønskede 72200,00



  1. Få den mest almindelige værdi for hver værdi i en anden kolonne i SQL

  2. Sådan bruges variabler i en Oracle PL/SQL where-klausul

  3. Læs data fra SqlDataReader

  4. MySQL VARCHAR(255) UTF8 er for lang til nøgle, men maks. længde er 1000 bytes