日期:2014-05-18  浏览次数:20624 次

◆◇◆同一sql语句,有时正常,有时出错,请大家看查查是什么问题.郁闷ing◆◇◆
查询语句如下:

select   *   from   ##TempData

SELECT    
t.AnalysSortKey   AS   类别,
t.Much   as   销售量,
t.MustPay   as   销售业绩,
cast( t.MustPay/Much     as   dec   (10,2) )     as     平均价,  
cast( cast( t.MustPay   /(   SELECT   sum(mustpay)   FROM   ##TempData   )   *100     as   dec   (10,2) ) as   varchar(5) )+ '% '       as   占总业绩百分比
FROM  

(
SELECT  
SD.AnalysSortKey,
SUM(SD.MustPay)   as   MustPay,
SUM(SD.Much)   as   Much

FROM
##TempData       SD  
GROUP   BY  
SD.AnalysSortKey
)   t


当     ##TempData   有如下的记录时
-------------------------------
much         MustPay   AnalysSortKey
-------------------------------
7 560.00 欧菜雅
8 640.00 欧菜雅
8 640.00 欧菜雅2
8 640.00 欧菜雅2
3 240.00 欧菜雅

> > >     输出结果:   (正常)
-------------------------------------------------------
类别     销售量       销售业绩           平均价       占总业绩百分比
-------------------------------------------------------
欧菜雅             18       1440.00             80.00         52.94%
欧菜雅2         16           1280.00             80.00         47.06%


当     ##TempData   有如下的记录时
-------------------------------
much         MustPay   AnalysSortKey
-------------------------------
7 560.00 单项
8 640.00 单项
8 640.00 单项
8 640.00 单项
3 240.00 单项


> > >     输出结果:
-----------------------
服务器:   消息   8115,级别   16,状态   5,行   3
将   numeric   转换为数据类型   varchar   时发生算术溢出错误。


我现在发现的规律:当       ##TempData.AnalysSortKey     的记录是相同的内容时,就会报错,否则就是正常的,怎么回事呀?哪有里有问题啊



------解决方案--------------------
可以将
cast( cast( t.MustPay /( SELECT sum(mustpay) FROM ##TempData ) *100 as dec (10,2) ) as varchar(5) )+ '% '
换成
rtrim(cast(t.MustPay /( SELECT sum(mustpay) FROM ##TempData ) *100 as dec (10,2)))+ '% '
------解决方案--------------------
是的!