Wanneer ik deze opdracht uitvoer met SUM()
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
krijg ik,
Arithmetic overflow error converting expression to data type int.
Enig idee wat de oorzaak ervan is?
Ik “volg gewoon de instructies in dit antwoord .
Antwoord
Voor waarden groter dan de INT
max (2.147.483.647), “wil je COUNT_BIG (*) gebruiken.
SELECT COUNT_BIG(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Als het gebeurt in de SUM
, moet u Amount
converteren naar een BIGINT
.
SELECT COUNT(*) AS [Records], SUM(CONVERT(BIGINT, t.Amount)) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Antwoord
Dit probleem wordt veroorzaakt door SUM()
functie
je moet t.Amount
als BIGINT
SELECT COUNT(*) AS [Records], SUM(CAST(t.Amount AS BIGINT)) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Referentie