select sum(cy_f_num)/sum(cy_num) from f_item where company='伯昌 ' and  cy_qu>='2006-1-1' and cy_qu <='2006-8-20' 
sum(cy_num)指总的发货量
sum(cy_f_num)指返工数量
cy_qu代表时间
为什么结果是零?
我该怎么改才能算出白分比??????

解决方案 »

  1.   

    select sum(cy_f_num)*1.00/sum(cy_num) from f_item where company='伯昌 ' and  cy_qu>='2006-1-1' and cy_qu <='2006-8-20' 
      

  2.   

    数据类型的问题Int/Int结果会直接取整,你算算看3/2就知道了楼上的写法是用了默认转换:)
      

  3.   

    这个问题的本质是:SQLSERVER在进行隐式数据类型转换时,会向精度最高的数据类型“提升”,使变量的数据类型都变成精度高的类型,再进行运算,这个规则类似C++。
    所以,若想使四则运算精确到小数,必须对其中一个变量乘以1.0、1.00、1.000等等来确定精度,0的位数决定了结果的精度。这个问题经常会遇到的。例如也可以这样:
    sum(cy_f_num)/(sum(cy_num)*1.00)试试看:
    select 2/3      --整型/整型,精度相同,结果为整型。
    select 2+3            --整型+整型,精度相同,结果为整型。
    select 2*1.00/3       --浮点/整型,将2提升为浮点2.00,结果为浮点型。
    select 2+3*1.00       --整型+浮点,将3提升为浮点3.00,结果为浮点型。
      

  4.   

    抱歉,最后二行更正一下:
    select 2*1.00/3       --浮点/整型,将3提升为浮点3.00,结果为浮点型。
    select 2+3*1.00       --整型+浮点,将2提升为浮点2.00,结果为浮点型。