【发布时间】:2012-09-12 14:12:47
【问题描述】:
我有一张表格,显示一个人对调查的回复次数。该人的id 和survey id 是varchar(10) 的。回复的列是int,即0 无响应或1 响应,databaseId 是varchar(2)。它看起来像这样:
personId surveyId replied databaseId
0001 1366 0 3
0002 2243 1 1
0003 6693 0 2
0004 1246 0 1
0045 2740 1 4
.... .... ... ...
我正在尝试获取有关调查响应率的一些汇总统计信息,但是当我尝试将结果INSERT 放入新表时遇到了错误。新表的格式为:
surveyId respRate
1366 0.00000
2243 0.00832
2244 0.02377
8875 0.01534
.... ...
其中surveyId 是varchar(20) 而respRate 是decimal(5,5)。当我使用以下内容尝试插入新表时:
insert into summaryTable
(surveyId, meanrr)
SELECT t1.surveyId
,(sum(t1.replied)*1.0 / count(replied)*1.0) meanrr
FROM (select * from table1
where databaseid in ('1','2','3')) t1
where surveyId is not null
group by surveyId
我收到以下错误消息:
Msg 8115, Level 16, State 8, Line 8
Arithmetic overflow error converting numeric to data type numeric.
我对此进行了一些研究,除了增加目标列的大小(即decimal(5,5) --> decimal(10,10))之外没有发现太多,但是当我尝试这样做时,我得到了相同的响应。
如果我只尝试不带insert into 部分的查询部分,它似乎可以工作(或者我只是没有收到错误消息)。
还有其他建议吗?
【问题讨论】:
-
尝试进一步分解它 - 如果您删除除法和 *1.0 并插入 sum(t1.replied) 会怎样?你得到同样的错误吗?
标签: sql sql-server int decimal