主题:记录合并问题(附件已上传)!!!!!!!!!!!!!!!!!!
tsfdg
[专家分:530] 发布于 2009-04-02 16:45:00
我的数据库表中每个人有不同工种的多个证件,而每个证件是一条记录就构成了一人多条记录,
这多条记录的共同点就是“工号”相同。我想在一条记录中显示这个人的多个证件名称,如下:
表1
工号 姓名 工种 证号
001 王 钳工 …….
001 王 汽修 …….
008 李 电工 …….
008 李 木工 …….
008 李 钳工 …….
表2
工号 姓名 工种1 工种2 工种3 工种4
001 王 钳工 汽修
008 李 电工 木工 钳工
注:记录一万多条,工种近60个
恳请帮助!!!!!!!!!!!!!!!!!
最后更新于:2009-04-09 15:23:00
回复列表 (共18个回复)
11 楼
jinlonggao [专家分:17130] 发布于 2009-04-11 19:38:00
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 楼
jinlonggao [专家分:17130] 发布于 2009-04-11 19:47:00
楼主刚刚,你好!
用你上传的表调试以后,修改了一些问题,现在你可以直接拿去用了,不用做任何修改,如没有问题,请记着别忘了说声"谢"!
13 楼
tsfdg [专家分:530] 发布于 2009-04-12 08:49:00
楼上各位老师:“谢”是当然要说的,在各位的鼎立支持下更坚定了我对VFP学习的积极性!
还没测试先说声:谢谢各位!此帖坚决要收藏!还有:此帖评分已到极限!
14 楼
jinlonggao [专家分:17130] 发布于 2009-04-13 19:24:00
... ...
15 楼
zcl711109 [专家分:300] 发布于 2009-07-28 16:04:00
值得学习
16 楼
coffeenight [专家分:230] 发布于 2009-07-28 23:51:00
留个脚印,慢慢学
17 楼
cqf8340 [专家分:1810] 发布于 2009-07-31 16:27:00
问各位老师,在变量前加 m.是什么意思?
18 楼
homayzh [专家分:7040] 发布于 2009-07-31 16:38:00
m. 的意思是内存变量。
如
你打开一个表 table(name c(10) code c(10))
杨志鸿 001
name = "abcde"
?name &&显示杨志鸿 *-默认访问表的变量name
?m.name &&显示abcde *-访问内存变量name
我来回复