标题:按单位,姓名转行
只看楼主
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
结帖率:96%
已结贴  问题点数:20 回复次数:9 
按单位,姓名转行
姓名列转行
如附件,将表的姓名列转成行,姓名有很多行。想每20个姓名转成一行,且每个姓名之间加“,”英文逗号。如何实现?
 谢谢!!!
以前发过贴,现增加按单位分字段,求助!
附表,附原代码
姓名列转行.rar (392 Bytes)
搜索更多相关主题的帖子: 单位 代码 增加 转成 姓名 
2021-09-28 04:59
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
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大师写的代码
2021-09-28 05:02
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
想在原基础上增加一个按单位分的字段。
2021-09-28 05:03
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
电脑处理有一个基本的原则,就是保持原表不变,产生的新结果放在一张新表中,这样可以重复操控。也可以从原表按不同的需要产生多种结果。

只求每天有一丁点儿的进步就可以了
2021-09-28 08:27
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 4楼 wengjl
所言极是!!!
2021-09-28 08:32
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:2 
列转行.rar (928 Bytes)

只求每天有一丁点儿的进步就可以了
2021-09-28 08:51
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
回复 6楼 wengjl
谢谢
经测试运行后发现
一是:每行后面多一个“,”
二是:大于20人单位未分行。(单位有多于20人的,按20人一行)
麻烦问一下能做到吗?
2021-09-28 18:25
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:2 
程序代码:
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编辑过]


dBase有人接盘了。
2021-09-28 19:06
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:16 
模拟表
xx.rar (4.48 KB)



程序代码:
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编辑过]


坚守VFP最后的阵地
2021-09-28 23:52
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
回复 9楼 sdta
非常感谢!完美!!!
2021-09-29 01:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507007-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.159194 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved