Arithmetic overflow depending on group by columns
Solution 1:
The final value doesn't actually matter. What is likely happening, is that at some point in your SUM
you are going over the maximum value (2,147,483,647) or minimum value (-2,147,483,648) for an int
and getting the error.
Take this example:
SELECT SUM(V.I)
FROM (VALUES(2147483646),
(2),
(-2006543543))V(I);
This will likely generate the same error:
Arithmetic overflow error converting expression to data type int.
The result of the SUM
however, would be 140,940,105 (well below the maximum). This is because if 2147483646
and 2
are summed first, then you get 2147483648
, which is larger than the maximum value of an int
. If you CAST
/CONVERT
the value first, you don't get the error:
SELECT SUM(CONVERT(bigint,V.I))
FROM (VALUES(2147483646),
(2),
(-2006543543))V(I);