| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2297 人关注过本帖
标题:关于对人员得分情况进行排序并按照比例进行评比赋值的问题!
取消只看楼主 加入收藏
kqgsww
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2015-1-22
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
关于对人员得分情况进行排序并按照比例进行评比赋值的问题!
    各位大神,有个问题,做了好几次都会有漏项。

    一张表,字段xm,bydf,sydf,dc,分别对应姓名,本月得分,上月得分,档次。分数已经有了,现在想做的就是按照总人数的30%为优秀,dc='优秀';总人数的40%为良好,dc='良好',剩下的30%为合格,dc=‘合格’。
     因为涉及人数而且此人数要在表单中显示,所以不能有小数位,但是用round()函数四舍五入后算出的人数相加和总人数又不一致,在赋值过程中总是会出现问题,请大神们指教应该如何实现。
test.rar (583 Bytes)
搜索更多相关主题的帖子: 四舍五入 排序 函数 相加 赋值 
2020-02-11 14:09
kqgsww
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2015-1-22
收藏
得分:0 

use test
count to a
a_yx=round(a*30/100,0)
a_lh=round(a*40/100,0)
a_hg=round(a*30/100,0)

b=a-a_yx-a_lh-a_hg

IF b<0
a_hg=a_hg-1
ELSE
IF b>0
a_hg=g_hg+1
ENDIF
ENDIF



GO TOP
FOR a1=1 TO a_yx
GO a1
c=xm
UPDATE test SET dc='优秀' WHERE xm=c
endfor

FOR a2=1 TO a_lh
a1=a1+1
GO a1
c=xm
UPDATE test SET dc='良好' WHERE xm=c
ENDFOR

FOR a2=1 TO a_hg
a1=a1+1
GO a1
c=xm
UPDATE test SET dc='合格' WHERE xm=c
ENDFOR

我这么写总是提示记录超出范围。。。而且中间总会有漏项的。。。
2020-02-11 14:26
kqgsww
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2015-1-22
收藏
得分:0 
忘排序了。。貌似。。。
use test
SELECT * FROM test ORDER BY bydf  DESC INTO TABLE tmp.dbf
SELECT tmp
count to a
a_yx=round(a*30/100,0)
a_lh=round(a*40/100,0)
a_hg=round(a*30/100,0)

b=a-a_yx-a_lh-a_hg

IF b<0
a_hg=a_hg-1
ELSE
IF b>0
a_hg=g_hg+1
ENDIF
ENDIF



GO TOP
FOR a1=1 TO a_yx
GO a1
c=xm
UPDATE test SET dc='优秀' WHERE xm=c
endfor

FOR a2=1 TO a_lh
a1=a1+1
GO a1
c=xm
UPDATE test SET dc='良好' WHERE xm=c
ENDFOR

FOR a2=1 TO a_hg
a1=a1+1
GO a1
c=xm
UPDATE test SET dc='合格' WHERE xm=c
ENDFOR

我这么写总是提示记录超出范围。。。而且中间总会有漏项的。。。

[此贴子已经被作者于2020-2-11 15:48编辑过]

2020-02-11 15:43
kqgsww
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2015-1-22
收藏
得分:0 
回复 3楼 kqgsww
是啊,就是因为四舍五入的问题,把这个东西搞的麻烦死了,我又重新弄了一段代码,应该可以实现了。。。


CLOSE DATABASES all
use test
SELECT * FROM test ORDER BY bydf  DESC INTO TABLE tmp
SELECT tmp
count to a
a_yx=round(a*30/100,0)
a_lh=round(a*40/100,0)
a_hg=round(a*30/100,0)

b=a-a_yx-a_lh-a_hg

IF b<0
a_hg=a_hg-1
ELSE
IF b>0
a_hg=g_hg+1
ENDIF
ENDIF

FOR a1=1 TO a
GO a1
c=xm
IF a1<=a_yx
UPDATE test SET dc='优秀' WHERE xm=c
ELSE
IF a1>a_yx AND a1<=a_yx+a_lh
UPDATE test SET dc='良好' WHERE xm=c
ELSE
UPDATE test SET dc='合格' WHERE xm=c
ENDIF
ENDIF
ENDFOR


是啊,当时是想如果两个人分数相同,按照上月分数进行排的,写代码可能要把两个分数加一起排序然后再赋值。。。

[此贴子已经被作者于2020-2-11 16:00编辑过]

2020-02-11 15:58
kqgsww
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2015-1-22
收藏
得分:0 
啊哈!!!帅!!谢谢!!学习了!!!
2020-02-11 16:30
快速回复:关于对人员得分情况进行排序并按照比例进行评比赋值的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041291 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved