select (case when((SUM(sn.OrderNum-sn.ItemNoNum)-1)<0)then '0.0000' else Convert(float,SUM(sn.OrderNum-sn.ItemNoNum))/Convert(float,(SUM(sn.OrderNum-sn.ItemNoNum))) end)
都是0.没有小数点我要的结果是计算后得出结果result*100+'%'现在我在'0.0000'后加%就报错.
都是0.没有小数点我要的结果是计算后得出结果result*100+'%'现在我在'0.0000'后加%就报错.
LTRIM(( CASE WHEN ( ( SUM(sn.OrderNum - sn.ItemNoNum) - 1 ) < 0 )
THEN '0.0000'
ELSE CONVERT(FLOAT, SUM(sn.OrderNum - sn.ItemNoNum)) * 1.0
/ CONVERT(FLOAT, ( SUM(sn.OrderNum - sn.ItemNoNum) ))
END )) + '%'
ELSE SUM(sn.OrderNum-sn.ItemNoNum)*100.0/CONVERT(FLOAT , (SUM(sn.OrderNum-sn.ItemNoNum)))
END ))+'%'
用LTRIM把结果转换为字符串然后在+百分号,因为百分号是个字符串
直接加会出现数据类型转换错误的。
0%和100%
result*100 的数据类型从你的表达式中可以看到属于 float ,没有小数点的问题你可以在计算 / 的时候,在前面加一个1.* 给出我修改过的表达式:result=select (case when((SUM(sn.OrderNum-sn.ItemNoNum)-1)<0)then 0 else Convert(float,1.*(SUM(sn.OrderNum-sn.ItemNoNum))/(SUM(sn.OrderNum-sn.ItemNoNum))) end)最后你计算 result*100+'%'的时候 将 result*100 转换成 nvarchar .
例如: cast(result*100 as nvarchar(20))+'%' 这样应该就不会报错了。