有一个表Test,如下结构:
--------------
  A   B
--------------
  41  701想使用SQL求得,A占B的百分比,即:A=41;B=701;的时候,A/B = 0.05848....,我想要的结果是: 5.8%--------------------------------------------------------------------
我现在的做法是:SELECT RTRIM(CAST(A * 100 / B AS char(10))) + '%' AS Expr1
FROM TEST结果是:Expr1
5%即A在除以B的时候,自动把小数位省了,而我需要精确到小数后一位的5.8%。

解决方案 »

  1.   

    SELECT RTRIM(CAST(41 * 100.00 / 701 AS char(10))) + '%' AS Expr1
      

  2.   

    SELECT RTRIM(CAST((cast(41 * 100.00 / 701 as numeric(10,1))) AS char(10))) + '%' AS Expr1这个可以
      

  3.   

    SELECT RTRIM(CAST((cast(A * 100.00 / B as numeric(10,1))) AS char(10))) + '%' AS Expr1
      

  4.   


    to xyxfly(要学的东西太多了...) :象你那么做,结果是:5.848787%,我需要可以绝对控制小数点位数,因为以后可能会需要留两位。
      

  5.   

    to xyxfly(要学的东西太多了...) :
       Good!
      

  6.   

    看后面的,numeric(10,1)这个控制位数  1表示1,2表示2位
      

  7.   

    select rtrim(round(A*100.0/B,1))+'%' from test
      

  8.   

    SELECT RTRIM(CAST(41 * 100.0 / 701 AS char(10))) + '%' AS Expr1
      

  9.   

    --即A在除以B的时候,自动把小数位省了,而我需要精确到小数后一位的5.8%。create table test
    (A int,
    B int)
    insert test(A,B) values (41,701)
    select * from testSELECT CAST(cast(a as float) * 100 / B AS varchar(10)) as 除数,
    charindex('.',CAST(cast(a as float) * 100 / B AS varchar(10)),1) as 小数点位置,
    left(CAST(cast(a as float) * 100 / B AS varchar(10)),charindex('.',CAST(cast(a as float) * 100 / B AS varchar(10)),1)+1) + '%' AS Expr1
    FROM TESTdrop table test
      

  10.   

    SELECT RTRIM(CAST(A * 100.00 / B AS decimal(19,1))) + '%' AS Expr1
      

  11.   

    select rtrim(round(A*100.0/B,1))+'%' from test这个好,还四舍五入  ^_^
      

  12.   

    Declare @A int ,@B int
    set @A=47
    SET @B=93SELECT 计算列=CAST(CAST(@A * 100.00 /@B AS numeric(10,1)) as varchar(10))+'%'
    /* --结果计算列         
    ----------- 
    50.5%*/ -- 完成--此处没有用列名,要代入代的借码中,把@A和@B分别替换成你的列名即可.
      

  13.   

    原来有这么多人答了....上面的很多都正确。无非是个类型转换的问题。 你可以用带精度小数位数的数据类型,如 numeric/Decimal
      

  14.   

    to xyxfly(要学的东西太多了...) :
    这个是四舍五入了
    select rtrim(round(A*100.0/B,1))+'%' from test但是,这么多0
    5.800000000000%
      

  15.   

    呵呵,
    try:
    select rtrim(cast(round(A*100.0/B,1) as numeric(10,1))+'%' from test总之,原理就是类型转换,自己摸索摸索就知道了  ^_^
      

  16.   


    select rtrim(cast(round(41*100.0/701,1) as numeric(10,1))) 丢了个括号  -_-
      

  17.   

    to xyxfly(-_-) :
       放心,肯定给你高分,哈哈
      

  18.   

    to xyxfly(-_-):
       恩,是啊,分确实是次要的,问题已经解决我还没有结贴就是想再看看有没有更好的方法——
      

  19.   


    Declare @a int , @b  int 
    Set @A  = 41 ,@b = 701Select Rtrim(Cast(41*0.1/701*10*100 as Numeric(10,1))) + '%'
      

  20.   


    SELECT RTRIM(CAST(41 * 100.00 / 701 AS char(10))) + '%' AS Expr1
      

  21.   

    SELECT RTRIM(CAST(41 * 100.00 / 701 AS NUMERIC(10,1))) + '%' AS Expr1