注册 登录
编程论坛 VFP论坛

姓名列转行

杂七杂八 发布于 2020-08-26 23:20, 2097 次点击
如附件,将表的姓名列转成行,姓名有很多行。想每20个姓名转成一行,且每个姓名之间加“,”英文逗号。如何实现?
谢谢!!!
只有本站会员才能查看附件,请 登录
8 回复
#2
schtg2020-08-27 04:29
回复 楼主 杂七杂八
提供一个常见思路和关键代码,未上机测试,办法不是最好的,但易理解、操作,仅供参考。
1.将“姓名”字段的值按要求(20条记录)读入数组:
  select 姓名 from 姓名列转行 into array arr where 记录号<21
2.将数组值转为一字符串:
  cStr = ""
  for each scvar in arr
      cName = scvar
      cStr = cStr + alltrim(cName) + ","
  endfor  
  cStr = left(alltrim(cStr),len(alltrim(cStr))-1)
  ? cStr
3.将得到的字符串作为字段值写入数据表的记录中
  repl ……  或  update ……
4.循环操作,完成转换。
#3
sdta2020-08-27 05:58
方法一(不建议对原表进行操作)
程序代码:
CLOSE DATABASES
USE 姓名列转行
REPLACE 新姓名 WITH "" ALL
lnR = 2 && 设置lnR人为一行
lcStr = ""
LOCAL aa[CEILING(RECCOUNT() / lnR)]
lnCnt = 0
SCAN
    lcStr = lcStr + "," + ALLTRIM(姓名)
    IF  RECNO() = RECCOUNT() OR RECNO() % lnR = 0
        lcStr = SUBSTR(lcStr, 2)
        lnCnt = lnCnt + 1
        aa[lnCnt] = lcStr
        lcStr = ""
    ENDIF
ENDSCAN
SCAN FOR RECNO() % lnR = 1
    REPLACE 新姓名 WITH aa[CEILING(RECNO() / lnR)]
ENDSCAN
BROWSE


[此贴子已经被作者于2020-8-27 05:59编辑过]

#4
sdta2020-08-27 06:03
方法二(不对原表进行操作)
程序代码:
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
#5
杂七杂八2020-08-27 06:38
回复 2楼 schtg
  谢谢你,我已测试过了,可以用。
#6
杂七杂八2020-08-27 06:40
回复 4楼 sdta
谢谢,不对原表修改那是最好了。生成另一个表来处理。谢谢
#7
杂七杂八2020-08-27 06:44
回复 4楼 sdta
我已用了,高效率!!!
再一次谢谢!!!
#8
吹水佬2020-08-27 09:03
程序代码:
SELECT 姓名 FROM 姓名列转行 INTO ARRAY axm
nCol = 20
nRow = CEILING(ALEN(axm)/nCol)
DIMENSION axm[nRow,nCol]
DIMENSION axms[nRow,1]
FOR i=1 TO nRow
    axms[i] = axm[i,1]
    FOR j=2 TO nCol
        IF VARTYPE(axm[i,j])=="C"
            axms[i] = axms[i] - "," - axm[i,j]
        ENDIF
    ENDFOR
ENDFOR
CREATE CURSOR xms (xms C(240))
APPEND FROM ARRAY axms
BROWSE


[此贴子已经被作者于2020-8-27 09:08编辑过]

#9
schtg2020-08-27 17:04
@sdta、吹水佬俩版主,高!学习啦,谢谢!
1