| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 603 人关注过本帖
标题:求助~~判断两次成绩~~~
只看楼主 加入收藏
kingfox1
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-12-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求助~~判断两次成绩~~~
要求:判断同一人每一科的两次成绩,取最好成绩(等第分为A、B、C、D、Y、N、-、空,其中-和空均为缺考),然后根据两次考试人数输出一个人数最全的总表(因为有可能有人只参加了一次考试)。两个库内均有ckjh这个字段,这是学生考号,考号唯一,并且两次考试同一人的考号相同。

已经完成:能输出人数最全的总表

现在的问题:输出的“更新后”这个库的成绩与sele 1的相同,也就是说判断两次成绩哪个最好的那段不对头。。。

谢谢各位,早上又看了半天,终于发现了,其实是小问题,就是判断完第一个科之后没有返回sele 2,结果造成除第一科外的其余科目都是在sele 1中反复提取。。。
把do case下面的语句变成
  endcase
  repl &dd with ddb   这句变到encase下边了
  SELE 2              加了这个就OK了
   endfor
endif
endscan


代码如下:
set talk off
clea all
sele 2
use 第一次 alias hk
sele 1
use 第二次 alias hg
kjh=""
scan
kjh=ckjh
sele 2
loca for ckjh=kjh
if not eof()
 for i=1 to 18  
  dd="dd"+allt(str(i))
  dda=&dd
  sele 1
  do case
    case ddb="A"
       ddb=ddb
    case ddb="B" and dda="A"
       ddb=dda
    case ddb="C" and (dda="A" or dda="B")
       ddb=dda
    case ddb="D" and (dda="A" or dda="B" or dda="C")
       ddb=dda
    case ddb="Y" and (dda="A" or dda="B" or dda="C")
       ddb=dda
    case (ddb="N" or ddb="-" or ddb=" ") and (dda="A" or dda="B" or dda="C" or dda="Y")
       ddb=dda
  repl &dd with ddb
  endcase
 endfor
endif
endscan
sele 2
go top
scan
kjh=ckjh
sele 1
loca for ckjh=kjh
if eof()
 sele 2
 dele
else
 sele 2
endif
endscan
copy to bhg for dele()
reca all
sele hg
copy to 更新后
use 更新后
appe from bhg
reca all
eras bhg.dbf
clea all
use 更新后
set talk on

[ 本帖最后由 kingfox1 于 2011-12-2 16:55 编辑 ]
搜索更多相关主题的帖子: 最好 
2011-12-01 20:11
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:7 
A

只求每天有一丁点儿的进步就可以了
2011-12-01 20:51
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:7 
只看了前几句代码~

假设: 表1/表2 均有字段: 考号和语文成绩(A、B、C、D、Y、N、-、空)~

则如下代码即可得出 语文的最好成绩(vfp9.0版):

sele 表1.考号,chrtranc("ABCDYN-",chrtranc("ABCDYN-",表1.语文+表2.语文,""),"") 语言最好成绩;
    from 表1,表2 where 表1.考号=表2.考号


如果是vfp6.0版本, 那么先: sele.... , 再: upda... 即可~

如果2个表的记录不一致: 则先: inse into 表1 sele * from 表2 where ...

也可用 join 语句~ 总之, 都是1-2句代码就可解决的, 不要这么复杂的~

2011-12-01 23:45
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:7 
SELECT IIF(isNULL(tb1.ckjh),tb2.ckjh,tb1.ckjh) ckjh,;
       IIF(ISNULL(tb1.km1),tb2.km1,IIF(ISNULL(tb2.km1),tb1.km1,IIF(AT(tb1.km1,'ABCDYN- ')<=AT(tb2.km1,'ABCDYN- '),tb1.km1,tb2.km1)));
     FROM tb1 ;
     FULL JOIN tb2;
     ON tb1.ckjh=tb2.ckjh

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2011-12-02 09:49
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
SELECT IIF(isNULL(tb1.ckjh),tb2.ckjh,tb1.ckjh) ckjh,;
       IIF(ISNULL(tb1.km1),tb2.km1,IIF(ISNULL(tb2.km1),tb1.km1,IIF(AT(tb1.km1,'ABCDYN- ')<=AT(tb2.km1,'ABCDYN- '),tb1.km1,tb2.km1))) km1;
     FROM tb1 ;
     FULL JOIN tb2;
     ON tb1.ckjh=tb2.ckjh

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2011-12-02 09:50
kingfox1
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-12-1
收藏
得分:0 
我用的VFP6.0,估计大家用的都是9.0吧
2011-12-02 16:59
快速回复:求助~~判断两次成绩~~~
数据加载中...
 
   



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

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