sql >> Databáze >  >> RDS >> Sqlserver

Funkce SUM se nepřidává správně

Nejsem si jistý vaším datovým typem. Podívejte se ale na následující příklady vrácených hodnot. Zdá se, že v MSSQL 2012 vaše situace odpovídá datovému typu REAL. Zatímco PENÍZE, FLOAT, DECIMAL, DVOJNÁSOBNÁ PŘESNOST návratnost 72 200,00 SKUTEČNÉ vrátí 72199,9998321533. Viz níže:

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

Možná budete chtít změnit datový typ sloupce (pokud to není požadovaný typ, možná byl nastaven omylem z rozbalovací nabídky SQL Studia atd.) nebo CAST hodnotu jako jeden z výše uvedených datových typů, který vrátí požadovaný 72200,00



  1. Pořadí provádění podmínek v klauzuli SQL 'where'

  2. Jak získat nový běžecký zůstatek ze stávajícího zůstatku?

  3. Připojení Sequel Pro a MySQL se nezdařilo

  4. Integrita propojených datových entit při aktualizaci