有一个表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%。
--------------
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%。
解决方案 »
- 存储过程 调用 另外一个存储过程 的返回结果集
- SOS!
- 数据库分类递归查询
- 请高手看看一下如何用SQL语句实现以下查询
- 如何用SQL语句移动列的顺序!?
- 从一张表将一条数据插入到另一张表
- DBF文件导入到Sql Server中出现乱友?(参考了论坛的答案没解决)
- 如何对存储过程进行加密呀?
- 为什么ADOTable连接到SQL SERVER2000后执行Insert后紧接着执行cancle总是提示:"BOF或EOB中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前的记录
- 数据库基础
- 如何对查询出来的数据按每七天分组求和放在相应组明细的下面行?
- 为什么我导出到EXCEL中的数据总是有些项没数据而且每列不是一一对应的?
to xyxfly(要学的东西太多了...) :象你那么做,结果是:5.848787%,我需要可以绝对控制小数点位数,因为以后可能会需要留两位。
Good!
(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
set @A=47
SET @B=93SELECT 计算列=CAST(CAST(@A * 100.00 /@B AS numeric(10,1)) as varchar(10))+'%'
/* --结果计算列
-----------
50.5%*/ -- 完成--此处没有用列名,要代入代的借码中,把@A和@B分别替换成你的列名即可.
这个是四舍五入了
select rtrim(round(A*100.0/B,1))+'%' from test但是,这么多0
5.800000000000%
try:
select rtrim(cast(round(A*100.0/B,1) as numeric(10,1))+'%' from test总之,原理就是类型转换,自己摸索摸索就知道了 ^_^
select rtrim(cast(round(41*100.0/701,1) as numeric(10,1))) 丢了个括号 -_-
放心,肯定给你高分,哈哈
恩,是啊,分确实是次要的,问题已经解决我还没有结贴就是想再看看有没有更好的方法——
Declare @a int , @b int
Set @A = 41 ,@b = 701Select Rtrim(Cast(41*0.1/701*10*100 as Numeric(10,1))) + '%'
SELECT RTRIM(CAST(41 * 100.00 / 701 AS char(10))) + '%' AS Expr1