Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La fonction SOMME ne s'additionne pas correctement

Je ne suis pas sûr de votre type de données. Mais voyez les exemples suivants de valeurs renvoyées. Dans MSSQL 2012, votre situation semble correspondre au type de données REAL. Tandis que MONEY, FLOAT, DECIMAL, DOUBLE PRECISION retour 72200.00 RÉEL renvoie 72199.9998321533. Voir ci-dessous :

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

Vous voudrez peut-être changer le type de données de la colonne (s'il ne s'agit pas d'un type souhaité, il a peut-être été défini par erreur dans le menu déroulant de SQL Studio, etc.) ou CAST la valeur comme l'un des types de données ci-dessus qui renverra 72200.00