SQL高手请进,小弟求两段SQL语句?!急用!

wdbbl 2007-02-02 11:57:21
d7+access下一表:

表名:进度

结构如下:

单位 计划 本月 累计 进度 位次
---------------------------------------
单位1 2000 20 400 25% 3
单位2 1000 10 150 15% 5
单位3 5000 500 3000 60% 1
单位4 4000 100 2000 50% 2
单位5 5000 800 2500 50% 2

求以下两SQL语句:
1、进度=累计%计划*100的正确写法?!
SQL.Add('Update 进度 set 进度=累计/计划*100 where 计划>0');语句得出来的是0或者1。

2、在不打乱原来纪录顺序的前提下,如何实现位次自动排名?!同时考虑位次并列的情况!

在线等,急用!
万分感谢!

...全文
230 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdbbl 2007-02-03
  • 打赏
  • 举报
回复
正解:
SQL.Add('Update 进度 set 进度=round(累计*100/计划,2) where 计划>0');
SQL.Add('update 进度 as A set 位次 = dcount("*","进度","标志=3 and 计划>0 and 进度>=" & A.进度) where 标志=3 and 计划>0');

万分感谢wangtiecheng(不知不为过,不学就是错!) 老兄,敬请留下QQ号!

顺便赠送同志们我的一句座右铭:虽然我跟很多女人上过床,但我始终相信我是纯洁的!
OracleRoob 2007-02-03
  • 打赏
  • 举报
回复
或Format(),如:

format("123.456","##.##")
OracleRoob 2007-02-03
  • 打赏
  • 举报
回复
Round函数


描述

返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。

语法

Round(expression [,numdecimalplaces])

Round函数语法有如下几部分:

部分 描述
expression 必需的。要进行四舍五入运算的数值表达式。
numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。
OracleRoob 2007-02-03
  • 打赏
  • 举报
回复
用round(,2)或format()。
wwwwb 2007-02-02
  • 打赏
  • 举报
回复
select *,(select count(*) from tt where (累计/计划)*100 >=
=(a.累计/a.计划)*100 ) from tt a
or
select *,(select count(*) from tt where (累计/计划)*100 <=
=(a.累计/a.计划)*100 ) from tt a
wwwwb 2007-02-02
  • 打赏
  • 举报
回复
Update 进度 set 进度=(累计/计划)*100 where 计划>0
select *,(select count(*) from tt where =(累计/计划)*100 >=
=(a.累计/a.计划)*100 ) from tt a
or
select *,(select count(*) from tt where =(累计/计划)*100 <=
=(a.累计/a.计划)*100 ) from tt a
OracleRoob 2007-02-02
  • 打赏
  • 举报
回复
update 进度 as A set 位次 = dcount("*","进度","累计/计划>=" & A.累计/计划)
OracleRoob 2007-02-02
  • 打赏
  • 举报
回复
Update 进度 set 进度=cstr(累计/计划*100) & "%" where 计划>0
wdbbl 2007-02-02
  • 打赏
  • 举报
回复
呵呵,解决!
只是想把百分比保留两位小数,如何实现?!
wdbbl 2007-02-02
  • 打赏
  • 举报
回复
SQL.Add('进度 char(8),');

把字段加长到30,又提示无效索引!
wdbbl 2007-02-02
  • 打赏
  • 举报
回复
表结构如下:

SQL.Add('单位 char(20),');
SQL.Add('计划 numeric(14,0) default 0,');
SQL.Add('本月 numeric(14,2) default 0,');
SQL.Add('累计 numeric(14,2) default 0,');
SQL.Add('进度 char(8),');
SQL.Add('位次 numeric(2,0) default 0,');

但是这一句报错!说是字段太小,粘贴少点!
SQL.Add('Update 进度 set 进度1=cstr(累计1/计划1*100) & "%" where 计划1>0');
OracleRoob 2007-02-02
  • 打赏
  • 举报
回复
累计、计划都是数值型,进度字段是字符型。
wdbbl 2007-02-02
  • 打赏
  • 举报
回复
老大,以下通不过!
Update 进度 set 进度=cstr(累计/计划*100) & "%" where 计划>0
这三个字段应该定义成什么类型的?!
OracleRoob 2007-02-02
  • 打赏
  • 举报
回复
用dCount()域函数或子查询都可以在select查询中。

7,712

社区成员

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

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