0

我有一张表格,显示一个人回复调查的次数。人的idsurvey idvarchar(10)的。已回复的列是int0响应或1响应的 ,并且databaseIdvarchar(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
     ....              ...

哪里surveyIdvarchar(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部分的查询部分,它似乎可以工作(或者我只是没有收到错误消息)。

还有其他建议吗?

4

2 回答 2

1

使用特定的强制转换而不是隐式副作用 ( *1.0) 来转换值,例如:

cast(
  cast(sum(t1.replied) as float) / cast(count(replied) as float)
  as decimal(6,5)
) meanrr
于 2012-09-12T14:21:13.327 回答
1

您当前的数据类型decimal (5,5)不允许值为 1。它基本上意味着总共 5 个数字,所有数字都在小数点的右侧。

我猜你的一行有 100% 的响应率,这将1.0000导致溢出。

尝试使用decimal (6,5)允许整数的数据类型。

于 2012-09-12T14:25:15.523 回答