access数据计算错误!

tianyacao007 2005-11-15 09:59:32
SELECT Mid_CompanyPortfolioM.CompanyName AS 公司名,

> left(Mid_CompanyPortfolioM.tMonth,len(Mid_CompanyPortfolioM.tMonth)-2) AS 月

> 份, Mid_CompanyPortfolioM.SendCount AS 业务量,

> Mid_CompanyPortfolioM.CompeteCount AS 竞标数,

> Left(Mid_CompanyPortfolioM.CompeteCount/IIf(Mid_CompanyPortfolioM.SendCount=

> 0,1,Mid_CompanyPortfolioM.SendCount),5)*100 & '%' AS 竞标率,

> Mid_CompanyPortfolioM.WinCount AS 中标数,

> Left((Mid_CompanyPortfolioM.WinCount/IIf(Mid_CompanyPortfolioM.SendCount=0,1

> ,Mid_CompanyPortfolioM.SendCount)),5)*100 & '%' AS 中标率,

> Mid_CompanyPortfolioM.SendCarsCount AS 发单车次,

> Mid_CompanyPortfolioM.CompeteCarsCount AS 竞标车次,

> Left((Mid_CompanyPortfolioM.CompeteCarsCount/IIf(Mid_CompanyPortfolioM.SendC

> arsCount=0,1,Mid_CompanyPortfolioM.SendCarsCount)),5)*100 & '%' AS 车辆竞标

> 率, Mid_CompanyPortfolioM.ComplainCount AS 投诉量,

> Left((Mid_CompanyPortfolioM.ComplainCount/IIf((Mid_CompanyPortfolioM.SendCou

> nt)=0,1,(Mid_CompanyPortfolioM.SendCount))),5)*100 & '%' AS 投诉率

>

> FROM Mid_CompanyPortfolioM

>

> WHERE

> iif([StrCompanyName]="",((((Left([startday],Len([startday])-2))<=(Mid_Compan

> yPortfolioM.tMonth) And

> (Mid_CompanyPortfolioM.tMonth)<=[endday]))),((((Left([startday],Len([startda

> y])-2))<=(Mid_CompanyPortfolioM.tMonth) And

> (Mid_CompanyPortfolioM.tMonth)<=[endday]))) and

> CompanyName=[StrCompanyName]);

>

> 重点就看这一句吧:

> Left(Mid_CompanyPortfolioM.CompeteCount/IIf(Mid_CompanyPortfolioM.SendCount=

> 0,1,Mid_CompanyPortfolioM.SendCount),5)*100 & '%' AS 竞标率,在执行的时候:

> Mid_CompanyPortfolioM.SendCount 的值是11014,

> Mid_CompanyPortfolioM.CompeteCount 的值是1078。但是竟标率却是978.7%。你要是

> 说代码严重错误,但是也有对的啊,比如:Mid_CompanyPortfolioM.SendCount 的值是

> 16013, Mid_CompanyPortfolioM.CompeteCount 的值是9047,结果竞标率是56.49%。

> 我想是不是access里面对于除法有特别的要求呢!?但是其他的我写的查询都没有错误

> 啊 ?请教达人是什么原因如何更改?
...全文
215 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyacao007 2005-11-28
  • 打赏
  • 举报
回复
感谢to:wwwwb()
wwwwb 2005-11-16
  • 打赏
  • 举报
回复
测试了一下,确实是这样,ACCESS自动将数字->字符,在转换过程中出现了问题。
wwwwb 2005-11-16
  • 打赏
  • 举报
回复
估计是ACCESS在将写数字->字符转换过程中出现了问题
wwwwb 2005-11-16
  • 打赏
  • 举报
回复
对于数字设置格式要用FORMAT,LEFT是取字符串中取左起N个字符,估计是ACCESS在
转换过程中出现了问题
tianyacao007 2005-11-16
  • 打赏
  • 举报
回复
to: wwwwb() ( )
可以说说为什么要先*100再LEFT左取五位吗?反过来为什么就有错误?
wwwwb 2005-11-15
  • 打赏
  • 举报
回复
try:
Left((Mid_CompanyPortfolioM.CompeteCount/IIf(Mid_CompanyPortfolioM.SendCount=
0,1,Mid_CompanyPortfolioM.SendCount))*100,5) & '%' AS 竞标率
tianyacao007 2005-11-15
  • 打赏
  • 举报
回复
为什么不可以先LEFT取左5位后,再*100呢?
wwwwb 2005-11-15
  • 打赏
  • 举报
回复
说说原因好吗?
Left((Mid_CompanyPortfolioM.CompeteCount/IIf(Mid_CompanyPortfolioM.SendCount=
0,1,Mid_CompanyPortfolioM.SendCount))*100,5) & '%' AS 竞标率
用IIF函数是为了防止被除数为0,先两数相除后,再*100,取得百分数,
用LEFT取左边5位。
tianyacao007 2005-11-15
  • 打赏
  • 举报
回复
确实如此!谢谢你。为什么要这么改呢?说说原因好吗?

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧