select #temp2.*,
case when #temp2.daynumber = '0' then ' ' 
when #temp2.daynumber <>'0' then (cast((select count(*) from #temp2 where re = '已达标')as float)  /(select count(*) from #temp2) )
end  as percentage 
from #temp2   order by #temp2.re asc这个daynumber 明明是0 , percentage应该为空啊,为什么还是0呢?

解决方案 »

  1.   

    那你是想是多少?你的表里面的daynumber ='0',他执行的吧是另外的一个算法了,不是你的then后面的
      

  2.   

    我是想daynumber为0 的时候为空啊,不为0的时候才计算
      

  3.   

    这要跟你daynumber 的数据类型说起的
      

  4.   

    不要意思说错了,这个跟你 then 后面所有结果的数据类型 优先级有关系case when #temp2.daynumber = '0' then ' ' 
    when #temp2.daynumber <>'0' 
    then (cast((select count(*) from #temp2 where re = '已达标')as float)  /(select count(*) from #temp2) --这里的结果应该为float 所以这个case 表达式返回的数据类型也为float 
    --float 优先级最高)
    end  as percentage 改成下面的即可
    [code=SQL]case when #temp2.daynumber = '0' then ' ' 
    when #temp2.daynumber <>'0' 
    then ltrim(cast((select count(*) from #temp2 where re = '已达标')as float)  /(select count(*) from #temp2) --把结果格式化为字符串类型
      

  5.   

    虽然我说的不对但是daynumber  是个别名,怎么跟临时表扯上关系了
      

  6.   

    DECLARE @a INT 
    SET @a=1
    SELECT CASE WHEN @a='1' THEN '' ELSE 0 END 
    SELECT CASE WHEN @a='1' THEN '' ELSE '0' END