Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Функцията SUM не събира правилно

Не съм сигурен за вашия тип данни. Но вижте следните примери за върнати стойности. В MSSQL 2012 вашата ситуация изглежда съответства на типа данни REAL. Докато MONEY, FLOAT, DECIMAL, DOUBLE PRECISION връщане 72200.00 РЕАЛНИ връща 72199.9998321533. Вижте по-долу:

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

Може да искате да промените типа данни на колоната (ако не е желан тип, може би е зададен по погрешка от падащото меню на SQL Studio и т.н.) или CAST стойността като един от горните типове данни, който ще върне желания 72200.00



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql изберете 3 колони и дедупирайте две колони

  2. Актуализиране на доставчика на данни на Crystal Reports

  3. SQL Trigger не може да прави ВМЕСТО ИЗТРИВАНЕ, но е необходим за ntext, графични колони

  4. Защо тази заявка е бавна първия път след като стартирам услугата?

  5. Скриване на екземпляр на SQL Server в мрежата