编程论坛's Archiver

chuxue 发表于 2008-4-25 13:59

紧急求助:VF命令

您好,我是一个初学VF的人,有这样一个难题,请您帮助一下。
   有一个学校给学生报名,出现这样一个问题:有部分学生背着学校报了两三次名,例如张三在1班,4班报了两次名,一个人占了两个报名号,如何把他查出来?表格是一个VF的表,表里的内容有“报名号”“姓名”“身份证号”“所报科目”,我想从身份证号入手,查出重复报名的学生,希望您给指导一下。

Tiger5392 发表于 2008-4-25 14:17

报名程序出现问题,它允许同一个学生报名多次。从根源着手,报名时根据身份证号进行查询,若存在于表中则不予报名,否则允许报名。
既然已经出现这样的问题,可将重复记录保留一个即可。select * from 表 group by 身份证号

黄牛 发表于 2008-4-25 14:45

我以前也碰到过这个问题
那时没人帮我,没办法我用了一个非常老土的办法
use (表名)   
sort to (表名1) on (身份证号的字段名)
use
use (表名1) in 0 excl
sele (表名1)   &&新加一个字段,数值型,字节为1,把身份证号的字段改成字符型
repl (新字段名) with 1 all
total on (身份证号的字段名) to (表名2)   &&进行汇总
use
use 表名2
brow &&看新字段里面的数字,如果变成2或者3,反正不是1的说明肯定有2条以上的记录存在

chuxue 发表于 2008-4-25 16:07

回复 1# 的帖子 不太好

你给我说的这个方法是把其中的一个给删了,我们这得领导的意思是找出重复报名的人,让学生自己选择用哪个号,这是用机读卡过的,不存在程序问题。
请您告诉我如何找出重复报名的学生

黄牛 发表于 2008-4-25 16:27

按我的操作就能找到

Tiger5392 发表于 2008-4-25 17:04

select * from 表 where 身份证号 in (select 身份证号 from 表 having count(*)>1 group by 身份证号)

chuxue 发表于 2008-4-25 17:34

非常感谢各位

真的感谢各位对我的热心帮助,谢谢了

waterears 发表于 2008-5-4 18:18

新手select的理解

select * from 表 where 身份证号 in (select 身份证号 from 表 having count(*)>1 group by 身份证号)
先分组查询(以身份证号码分组),然后计算同一身份证号码大于2个数目(count命令),然后用in在这个东东里面查找身份证号.....从表查找身份号码...不明白了 呵呵  谁给具体解释下

南平狐狸 发表于 2008-5-12 22:18

其实也很简单……看你怎么做

1、用身份证号为关键字段索引:
index on 身份证号 to 索引文件
brow    && 查看表  身份证号相同或相近的会集中在一起
2、做个小程序:
index on 身份证号 to 索引文件1 uniq  && 唯一性索引
copy to array arrayname fiel 身份证号
count to nzens  && 统计真实人数
set index to && 关闭索引,恢复原始记录
n1=1
do while n1<=nzens
cn1=str(n1)
SET FILTER TO 身份证号=arrayname(&cn1,1)
count to nconf   && 统计重复身份证号
if nconf>1
go top
n2=1
do while n2<=nconf
? 姓名,身份证号,报考科目……  && 打印或者生成文本或者生成表记录
skip
n2=n2+1
enddo
endif
n1=n1+1
enddo
SET FILTER TO

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.