注册 登录
编程论坛 VFP论坛

按单位,姓名转行

杂七杂八 发布于 2021-09-28 04:59, 2872 次点击
姓名列转行
如附件,将表的姓名列转成行,姓名有很多行。想每20个姓名转成一行,且每个姓名之间加“,”英文逗号。如何实现?
 谢谢!!!
以前发过贴,现增加按单位分字段,求助!
附表,附原代码
只有本站会员才能查看附件,请 登录
9 回复
#2
杂七杂八2021-09-28 05:02
CLOSE DATABASES
CREATE CURSOR tt (xh n(4), xm c(200))
USE 姓名列转行 IN 0 ALIAS xm
SELECT xm
lnR = 5 && 设置lnR人为一行
lcStr = ""
lnCnt = 0
SCAN
    lcStr = lcStr + "," + ALLTRIM(姓名)
    IF  RECNO() = RECCOUNT() OR RECNO() % lnR = 0
        lcStr = SUBSTR(lcStr, 2)
        lnCnt = lnCnt + 1
        INSERT INTO tt VALUES (lnCnt, lcStr)
        lcStr = ""
    ENDIF
ENDSCAN
SELECT tt
BROWSE
这是以前S大师写的代码
#3
杂七杂八2021-09-28 05:03
想在原基础上增加一个按单位分的字段。
#4
wengjl2021-09-28 08:27
电脑处理有一个基本的原则,就是保持原表不变,产生的新结果放在一张新表中,这样可以重复操控。也可以从原表按不同的需要产生多种结果。
#5
laowan0012021-09-28 08:32
回复 4楼 wengjl
所言极是!!!
#6
wengjl2021-09-28 08:51
只有本站会员才能查看附件,请 登录
#7
杂七杂八2021-09-28 18:25
回复 6楼 wengjl
谢谢
经测试运行后发现
一是:每行后面多一个“,”
二是:大于20人单位未分行。(单位有多于20人的,按20人一行)
麻烦问一下能做到吗?
#8
xuminxz2021-09-28 19:06
程序代码:
CLOSE TABLES all
SELECT 单位 dwmc,SPACE(LEN(姓名)*20) xm FROM 姓名列转行 INTO dbf zgmd WHERE .f.
SELECT distinc 单位 as dwmc FROM 姓名列转行 INTO CURSOR dwtmp

SCAN
    _dwmc=ALLTRIM(dwmc)
    select 姓名 as xm from 姓名列转行 INTO CURSOR xmtmp where ALLTRIM(单位)==_dwmc
    fzs=CEILING(RECCOUNT('xmtmp')/20)-1
    FOR i=0 TO fzs
        SELECT xmtmp
        GO i*20+1
        _xm=''
        j=0
        DO WHILE !EOF() AND j<20
            _xm=_xm+','+ALLTRIM(xm)
            skip
        ENDDO
        INSERT INTO zgmd (dwmc,xm) VALUES (_dwmc,SUBSTR(_xm,2))
    ENDFOR
ENDSCAN


[此贴子已经被作者于2021-9-28 19:10编辑过]

#9
sdta2021-09-28 23:52
模拟表
只有本站会员才能查看附件,请 登录



程序代码:
CLOSE DATABASES
USE xx IN 0 ALIAS bj
CREATE CURSOR test (bj c(10), xm c(150))
SELECT 班级名称 bjmc, COUNT(*) rs FROM xx GROUP BY 1 INTO CURSOR bjmc
lnR = 20
SCAN
    lnC = 0
    lnCnt = 0
    lcXm = ""
    SELECT bj
    SCAN FOR ALLTRIM(班级名称) == ALLTRIM(bjmc.bjmc)
        lnC = lnC + 1
        lcXm = lcXm - "," - 姓名
        IF lnC = bjmc.rs OR lnC % lnR = 0
            lnCnt = lnCnt + 1
            INSERT INTO test VALUES (ALLTRIM(bj.班级名称) + "_" + TRANSFORM(lnCnt), SUBSTR(lcXm, 2))
            lcXm = ""
        ENDIF
    ENDSCAN
ENDSCAN
SELECT test
BROWSE


[此贴子已经被作者于2021-9-29 00:11编辑过]

#10
杂七杂八2021-09-29 01:17
回复 9楼 sdta
非常感谢!完美!!!
1