标题:表格列转行
只看楼主
shenxihua
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-4-7
结帖率:100%
已结贴  问题点数:20 回复次数:12 
表格列转行
品种     机号
A         5
B         4
A         1
A         3
A         2
B         6
B         7
我想把表做成:
品种
A        5  1  3  2  
B        4  6  7

请问用VFP怎么实现?高,谢谢!

搜索更多相关主题的帖子: 表格 VFP 
2023-04-30 22:30
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:15 
程序代码:
CREATE CURSOR test (品种 c(1), 机号 n(1))
INSERT INTO test VALUES ("A", 5)
INSERT INTO test VALUES ("B", 4)
INSERT INTO test VALUES ("A", 1)
INSERT INTO test VALUES ("A", 3)
INSERT INTO test VALUES ("A", 2)
INSERT INTO test VALUES ("B", 6)
INSERT INTO test VALUES ("B", 7)
SELECT 品种, COUNT(*) lnCnt FROM test GROUP BY 1 ORDER BY 2 DESC INTO ARRAY aa
lcStr = "品种 c(1)"
FOR ln = 1 TO aa[1,2]
    lcStr = lcStr + ", S" + TRANSFORM(ln) + " n(1)"
ENDFOR
CREATE CURSOR t1 (&lcStr) && 保存最后结果
INSERT INTO t1 (品种) SELECT DISTINCT 品种 FROM test 
INDEX ON 品种 TAG t1
CREATE CURSOR t2 (品种 c(1), js N(4)) && 记录字段列序号
INSERT INTO t2 (品种) SELECT DISTINCT 品种 FROM test 
INDEX ON 品种 TAG t2
SELECT test
SCAN 
    IF SEEK(test.品种, "t2", "t2") = .T.
        REPLACE js WITH js + 1 IN t2
        ln = t2.js
        IF SEEK(test.品种, "t1", "t1") = .T.
            REPLACE ("S" + TRANSFORM(ln)) WITH test.机号 IN t1
        ENDIF 
    ENDIF
ENDSCAN
SELECT t1
BROWSE 


坚守VFP最后的阵地
2023-04-30 23:23
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
还可以通过数组的方法解决问题

坚守VFP最后的阵地
2023-04-30 23:24
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
一种简单的归类,安品种划分记录条就好。

素数问题的解决是我学习编程永恒的动力。
2023-04-30 23:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用shenxihua在2023-4-30 22:30:08的发言:

品种     机号
A         5
B         4
A         1
A         3
A         2
B         6
B         7
我想把表做成:
品种     ??????
A        5  1  3  2  
B        4  6  7

未看明这样转换想表达什么,有什么意义?
2023-05-01 09:48
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:565
专家分:1668
注 册:2017-7-16
得分:0 
这样的转置,你还是跑到EXCEL中做,很方便的。
2023-05-01 18:39
zhken
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:273
专家分:594
注 册:2012-9-21
得分:5 
*多一种方法理解一下
SELECT 0
CREATE CURSOR 表1(品种 c(5),机号 c(5))
INSERT INTO 表1 VALUES ("A", '5')
INSERT INTO 表1 VALUES ("B", '4')
INSERT INTO 表1 VALUES ("A", '1')
INSERT INTO 表1 VALUES ("A", '3')
INSERT INTO 表1 VALUES ("A", '2')
INSERT INTO 表1 VALUES ("B", '6')
INSERT INTO 表1 VALUES ("B", '7')

SELECT 0
CREATE CURSOR 表2(A c(5),B c(5))

SELECT 表1
GO top
DO WHILE .NOT.EOF()
pz=UPPER(ALLTRIM(品种))
jh=ALLTRIM(机号)
SELECT 表2
LOCATE FOR empty(&pz)
IF .not.FOUND()
APPEND BLANK
ENDIF
REPLACE &pz WITH JH
SELECT 表1
SKIP
ENDDO
SELECT 表2
BROWSE
2023-05-01 21:45
shenxihua
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-4-7
得分:0 
谢谢二楼,正是我想要的结果。
七楼的结果行列颠倒了,如果能倒过来就对了。
其实我想要的是机号连成一行文本,写在一个字段里。我就可以转成word文件去打印了。
这样的表现实很有意义的,一个品种有哪机台机在做。
2023-05-02 00:44
shenxihua
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2023-4-7
得分:0 
品种     机号
A         5
B         4
A         1
A         3
A         2
B         6
B         7
我想把表做成:
品种   机        号
A        5  1  3  2  (机号是一个字符型字段)
B        4  6  7
然后我可以做成报表或导出到excel或者word打印。
2023-05-02 06:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用shenxihua在2023-5-2 06:33:40的发言:

我想把表做成:
品种   机        号
A        5  1  3  2  (机号是一个字符型字段)
B        4  6  7
然后我可以做成报表或导出到excel或者word打印。

2楼的代码变一下就可以,更简单些了。
2023-05-02 06:41



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




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

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