回 帖 发 新 帖 刷新版面

主题:记录合并问题(附件已上传)!!!!!!!!!!!!!!!!!!

我的数据库表中每个人有不同工种的多个证件,而每个证件是一条记录就构成了一人多条记录,

这多条记录的共同点就是“工号”相同。我想在一条记录中显示这个人的多个证件名称,如下:

表1
工号   姓名   工种    证号
001     王     钳工    …….
001     王     汽修    …….
008     李     电工    …….
008     李     木工    …….
008     李     钳工    …….


表2
工号    姓名   工种1    工种2   工种3   工种4
001     王     钳工     汽修
008     李     电工     木工    钳工



注:记录一万多条,工种近60个

恳请帮助!!!!!!!!!!!!!!!!!

回复列表 (共18个回复)

11 楼

if !used('表1')
  use 表1
endif
SELECT 表1
* 求表1中各字段的长度
nGh = FSIZE('工号')
nXm = FSIZE('姓名')
nDw = FSIZE('单位')
nGz = fsize('工种')
select 0
select 工号,姓名,单位,count(*) as 证件数 from 表1 WHERE !EMPTY(工号) group by 工号,姓名,单位 into cursor cc1
select 0
select max(证件数) as 最多证件数 from cc1 into cursor cc2
n = 最多证件数
fStr = '工号 C('+ALLTRIM(STR(nGh))+'),姓名 C('+ALLTRIM(STR(nXm))+'),单位 C('+ALLTRIM(STR(nDw))+')'
for i = 1 to n
  fStr = fStr + ',工种'+alltr(str(i))+' C('+ALLTRIM(STR(nGz))+')'
endfor    && 结果类似于:" ,工种1 C(6),工种2 C(6),..."
create table 表2 (&fStr.)  &&定义"结果表"
select cc1
scan
  gh = 工号
  fStr = '工号,姓名,单位'
  vStr = '"'+工号+'","' + 姓名 +'","'+ 单位 +'"'
  for i = 1 to 证件数
    fStr = fStr + ',工种'+ alltr(str(i))
  endfor
  select 表1
  set filter to 工号 = gh
  scan
    vStr = vStr + ',"'+工种+'"'
  endscan
  inser into 表2 (&fStr.) values(&vStr.)
  select cc1
endscan
SELECT 表2
BROWSE

12 楼

楼主刚刚,你好!
用你上传的表调试以后,修改了一些问题,现在你可以直接拿去用了,不用做任何修改,如没有问题,请记着别忘了说声"谢"!

13 楼

楼上各位老师:“谢”是当然要说的,在各位的鼎立支持下更坚定了我对VFP学习的积极性!

还没测试先说声:谢谢各位!此帖坚决要收藏!还有:此帖评分已到极限!

14 楼

    ... ...

15 楼

值得学习

16 楼

留个脚印,慢慢学

17 楼

问各位老师,在变量前加 m.是什么意思?

18 楼

m. 的意思是内存变量。

你打开一个表  table(name c(10) code c(10))
                    杨志鸿     001

name = "abcde"

?name &&显示杨志鸿  *-默认访问表的变量name
?m.name &&显示abcde    *-访问内存变量name 

我来回复

您尚未登录,请登录后再回复。点此登录或注册