注册 登录
编程论坛 VFP论坛

如何在原表中生成序号字段并根据lbdm填充序号

反璞归真 发布于 2024-06-08 13:48, 432 次点击
如何在原表中生成序号字段并根据lbdm填充序号,例如:01生成071201001至代码01结束,02生成071202001至代码02结束,以此类推。求助大师帮忙,十分感谢!


只有本站会员才能查看附件,请 登录
10 回复
#2
sdta2024-06-08 16:12
REPLACE ALL XH WITH "0712"+ALLTRIM(LBDM)+"001"
#3
反璞归真2024-06-08 17:30
回复 2楼 sdta
估计是我没有表达清楚意思,就是代码01有几个人生成几个连续号码。例如:01代码的生成071201001、071201002……071201006.怎么实现不同类别的流水编号。

[此贴子已经被作者于2024-6-8 20:41编辑过]

#4
sdta2024-06-08 20:25
程序代码:
CREATE CURSOR test (lbdm c(10), xh c(9))
INSERT INTO test (lbdm) VALUES ("01")
INSERT INTO test (lbdm) VALUES ("01")
INSERT INTO test (lbdm) VALUES ("01")
INSERT INTO test (lbdm) VALUES ("02")
INSERT INTO test (lbdm) VALUES ("02")
INSERT INTO test (lbdm) VALUES ("02")
INSERT INTO test (lbdm) VALUES ("02")
INSERT INTO test (lbdm) VALUES ("03")
INSERT INTO test (lbdm) VALUES ("03")
lcdm = SPACE(0)
lcxh = "071201"
SCAN
    IF lbdm == lcdm
        lnxh = lnxh + 1
    ELSE
        lcdm = lbdm
        lnxh = 1
    ENDIF
    REPLACE xh WITH lcxh + PADL(lnxh,3,"0")
ENDSCAN
BROWSE


#5
反璞归真2024-06-08 21:03
回复 4楼 sdta
有没有简单点的命令,直接在原表中生成序号字段填充流水号

[此贴子已经被作者于2024-6-8 21:04编辑过]

#6
chychychy2024-06-08 22:13
回复 4楼 sdta
我感觉他是比如01有6个,生成:01001至01006,02有9个,生成02001至02009,前缀共用0712
程序代码:

lcdm = SPACE(0)
lcxh = "0712"
SCAN
    IF lbdm == lcdm
        lnxh = lnxh + 1
    ELSE
        lcdm = lbdm
        lnxh = 1
    ENDIF
    REPLACE xh WITH lcxh +ALLTRIM(LBDM) +PADL(lnxh,3,"0") &&&此处稍微修改一下
ENDSCAN
BROWSE



[此贴子已经被作者于2024-6-9 16:33编辑过]

#7
chychychy2024-06-08 22:17
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:
Select lbdm,Count(*) rs From ceshi Group By 1 Into Array alcxh&&&ceshi为原表名
Select ceshi
Blank Fields xh All&&&增加测试用

Go Top
For i=1 To Alen(alcxh,1)
    For j=1 To alcxh[i,2]
        Replace xh With  "0712"+Alltrim(lbdm)+Padl(j,3,"0")
        If Not Eof()
            Skip 1
        Else
            Exit
        Endif
    Endfor
Endfor
Browse



[此贴子已经被作者于2024-6-9 05:48编辑过]

#8
schtg2024-06-09 06:29
回复 7楼 chychychy
4楼已经给出代码啦,是这样的吗?
哈哈,与你的6楼的一样哈。
只有本站会员才能查看附件,请 登录



[此贴子已经被作者于2024-6-9 06:34编辑过]

#9
csyx2024-06-09 06:44
select recno() as rec, * from 你的表 into cursor temp
select a.xm, a.xb, a.lbdm, '0712'+a.lbdm+padl(1+a.rec-b.beg,3,'0') as 序号 from temp a ;
    inner join (select lbdm, min(rec) as beg from temp group by lbdm) b on a.lbdm = b.lbdm ;
    into dbf 结果表



[此贴子已经被作者于2024-6-9 06:55编辑过]

#10
chychychy2024-06-09 07:03
回复 8楼 schtg
我就是完全复制的4楼的,就是替换那个地方lcxh = "071201"换成了lcxh = "0712"
#11
吹水佬2024-06-09 08:56
以下是引用反璞归真在2024-6-8 21:03:18的发言:

有没有简单点的命令,直接在原表中生成序号字段填充流水号

这样做要改原表结构,无必要。
所谓原表只是表文件名变更就是了
可先将原表更名作备份
1