Cuando ejecuto este comando con SUM()
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Estoy obteniendo,
Arithmetic overflow error converting expression to data type int.
¿Alguna idea de cuál es la causa?
Simplemente sigo las instrucciones en esta respuesta .
Respuesta
Para valores mayores que INT
máx. (2,147,483,647), querrá usar COUNT_BIG (*).
SELECT COUNT_BIG(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Si está sucediendo en SUM
, debe convertir Amount
en un 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;
Respuesta
Este problema es causado por SUM()
función
tienes que CAST t.Amount
como 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;
Referencia