表中有6个列
id,word,a_id,wordnum_a,totalnum_a,wordnum_set,a1,a2
其中,id自动加1,name字符型,a_id整型(文章号),wordnum_a整型(统计某词在其对应的文章中出现的次数),totalnum_a整型(统计每篇文章有多少个词),wordnum_set整型(统计某词在所有文章中的总次数),a1,float型(wordnum_a/totalnum_a),a2,float型(wordnum_a/wordnum_set)
已知,id,word,a_id都已经有值,
我有两个问题
1、如何在查询分析器中构造sql语句,利用update把wordnum_a,totalnum_a,wordnum_set三列的值都更新?(因为我有几百万条记录,所以查询优化很重要)
2、在求a1的时候,虽然为float型,比如wordnum_a=1,totalnum_a=3,但是求出来的a1为0,而不是0.33333……,请问在SQL中整型和整型相除,是不是得不到float型?

解决方案 »

  1.   

    /(除)
    用一个数除以另一个数(算术除法运算符)。语法
    dividend / divisor参数
    dividend是要被除的数字表达式。dividend 可以是数字数据类型分类中的任何数据类型(datetime 或 smalldatetime 数据类型除外)的任何有效 Microsoft® SQL Server™ 表达式。divisor除数的数字表达式。divisor 可以是具有数字数据类型分类中任何数据类型(datetime 和 smalldatetime 数据类型除外)的任何有效 SQL Server 表达式。结果类型
    返回优先级较高的参数的数据类型。有关数据类型优先级的更多信息,请参见数据类型的优先顺序。 如果用一个整型的 divisor 去除整型的 dividend,其结果是一个整数,小数部分被截断。
      

  2.   

    update 没有太多的优化的余地,最多是用临时表控制一次性update的条数,避免大面积长时间的更新锁,多个字段本来就是可以同时更新的 比方 update a set a.a=1,a.b=2 
    想要除法结果返回double只要强制转化两个运算数字里面的一个为decimal就好了 比方cast(1 as decimal(20,2))