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'后加%就报错.

解决方案 »

  1.   

    SELECT
        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 )) + '%'
      

  2.   

    SELECT  LTRIM((CASE WHEN ((SUM(sn.OrderNum-sn.ItemNoNum)-1) < 0) THEN 0.00
                  ELSE SUM(sn.OrderNum-sn.ItemNoNum)*100.0/CONVERT(FLOAT , (SUM(sn.OrderNum-sn.ItemNoNum)))
             END ))+'%'
             用LTRIM把结果转换为字符串然后在+百分号,因为百分号是个字符串
    直接加会出现数据类型转换错误的。
      

  3.   

      LTRIM((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)))*100.00 end))+'%'所有的结果都是
    0%和100%
      

  4.   

    遇到过一次这样的问题 记得好像是sum的问题,你可以把sum里那个值拿出来看看就知道了。
      

  5.   

    我给出我自己的分析
    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))+'%' 这样应该就不会报错了。