◆◇◆同一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)))+ '% '
------解决方案--------------------是的!