Kiedy uruchamiam to polecenie z SUM()
SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101;
Otrzymuję,
Arithmetic overflow error converting expression to data type int.
Masz jakieś pojęcie o przyczynie?
Po prostu postępuję zgodnie z instrukcjami w tę odpowiedź .
Odpowiedź
W przypadku wartości większych niż INT
max (2 147 483 647), będziesz „chciał użyć 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;
Jeśli dzieje się to w SUM
, musisz przekonwertować Amount
na 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;
Odpowiedź
Ten problem jest spowodowany przez SUM()
musisz CAST t.Amount
jako 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;
Referencje