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

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

...全文
193 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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查询中。
回复
相关推荐
发帖
Access
创建于2007-09-28

7518

社区成员

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
申请成为版主
帖子事件
创建了帖子
2007-02-02 11:57
社区公告
暂无公告