Quando eseguo questo 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;
sto ottenendo,
Arithmetic overflow error converting expression to data type int.
Qualche idea su quale sia la causa?
Sto solo seguendo le istruzioni in questa risposta .
Risposta
Per valori maggiori di INT
max (2.147.483.647), vorrai utilizzare 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;
Se sta accadendo in SUM
, devi convertire Amount
in 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;
Risposta
Questo problema è causato da SUM()
funzione
devi CAST t.Amount
come 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;
Riferimento