När jag kör det här kommandot med SUM()
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Jag får,
Arithmetic overflow error converting expression to data type int.
Har du någon aning om vad som är orsaken till det?
Jag följer bara instruktionerna i det här svaret .
Svar
För värden större än INT
max (2.147.483.647), du vill använda 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;
Om det händer i SUM
måste du konvertera Amount
till en 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;
Svar
Problemet orsakas av SUM()
-funktion
du måste CAST t.Amount
som 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;
Referens