| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10320 人关注过本帖, 1 人收藏
标题:纵向的数据横向显示出来
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
行转列,问度娘,很多。
http://
2016-03-02 13:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用aaaaaa在2016-3-2 13:29:44的发言:
而楼主的题意是行列转置问题,或者叫做数据库的压扁技术。

分类统计(纯属个人叫法),也是加减运算,只是用字符串作加减运算有点特别。
2016-03-02 14:34
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
太好了。谢谢 11楼的示例。

其实数据库的转置 (PIVOT/UnPIVOT) 和矩阵的转置 (Transposition) 还是有区别的。
数据库的转置至少有一个可以参加聚合运算的数字字段,一般需要三个栏位,着重与数据库的技术;
矩阵的转置可以是任何类型的栏位,更偏向数值运算。

SQL Server/Oracle 有 PIVOT/UnPIVOT 函数,VFP 没有,但 VFP 可以借助于交叉表的技术,比如按照 11 楼的连接的示例,用 VFP 可以这么做:

*!*    创建数据游标
Create Cursor TestRows2Columns ;
    (UserName C(10), Subject C(10), Source I)

*!*    --插入测试数据
Insert Into TestRows2Columns Values ('张三', '语文',  60)
Insert Into TestRows2Columns Values ('李四', '数学',  70)
Insert Into TestRows2Columns Values ('王五', '英语',  80)
Insert Into TestRows2Columns Values ('王五', '数学',  75)
Insert Into TestRows2Columns Values ('王五', '语文',  57)
Insert Into TestRows2Columns Values ('李四', '语文',  80)
Insert Into TestRows2Columns Values ('张三', '英语', 100)

*!*    1:静态拼接行转列
Select * From TestRows2Columns ;
    Order By UserName, Subject Into Cursor Sys(2015)
Do (_Genxtab) With 'xtab'
Browse Last

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-02 19:59
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
矩阵的转置可以一单位、45度、90度至360度的 CW/CCW (正时针/逆时针) 的任意转置,而 PIVOT(行转列)/UnPIVOT(列转行) 好像不行。

如果谁对 SQL Server 的 SQL 语句熟悉,针对楼主的两个字符型的字段用 SQL 语句进行转置,我们也试试看,是否可以用 VFP 移植。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-02 20:14
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:3 
以下是引用aaaaaa在2016-3-2 19:59:39的发言:

太好了。谢谢 11楼的示例。
 
其实数据库的转置 (PIVOT/UnPIVOT) 和矩阵的转置 (Transposition) 还是有区别的。
数据库的转置至少有一个可以参加聚合运算的数字字段,一般需要三个栏位,着重与数据库的技术;
矩阵的转置可以是任何类型的栏位,更偏向数值运算。
 
SQL Server/Oracle 有 PIVOT/UnPIVOT 函数,VFP 没有,但 VFP 可以借助于交叉表的技术,比如按照 11 楼的连接的示例,用 VFP 可以这么做:
 
*!*    创建数据游标
Create Cursor TestRows2Columns ;
    (UserName C(10), Subject C(10), Source I)
 
*!*    --插入测试数据
Insert Into TestRows2Columns Values ('张三', '语文',  60)
Insert Into TestRows2Columns Values ('李四', '数学',  70)
Insert Into TestRows2Columns Values ('王五', '英语',  80)
Insert Into TestRows2Columns Values ('王五', '数学',  75)
Insert Into TestRows2Columns Values ('王五', '语文',  57)
Insert Into TestRows2Columns Values ('李四', '语文',  80)
Insert Into TestRows2Columns Values ('张三', '英语', 100)
 
*!*    1:静态拼接行转列
Select * From TestRows2Columns ;
    Order By UserName, Subject Into Cursor Sys(2015)  
Do (_Genxtab) With 'xtab'
Browse Last
    1:静态拼接行转列
Select * From TestRows2Columns ;
    Order By UserName, Subject Into Cursor Sys(2015)  
Do (_Genxtab) With 'xtab' ***请问这是一条什么命令?
Browse Last
字段只有三个,不能小于3个也不能多于3个,没有通用性

[此贴子已经被作者于2016-3-4 09:42编辑过]

2016-03-04 09:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用sylknb在2016-3-4 09:00:35的发言:
Do (_Genxtab) With 'xtab' ***请问这是一条什么命令?

? _Genxtab
2016-03-04 09:22
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO 9\VFPXTAB.PRG
2016-03-04 09:24
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
原来是调动VFP9的内部程序,这个方法不通用。
2016-03-04 12:26
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
1. Genxtab 可以是两个、三个或者多个栏位(字段),但其中必须有个数值型字段,下次我做个极端的示例,只有两个字段,且都是字符型的 PIVOT。
15 楼 的示例我是完全按照 11 楼 的示例模仿 SQL Server 的 PIVOT() 函数做的,

2. SQL Server 的 PIVOT() 函数是内部程序,VFP 的交叉表是一个外部程序,GenXTab.prg,你可以改动,在 FoxPro 的时代就有了。
你说 VFP 这个方法通用不通用?
你说 VFP 这个方法灵活不灵活?
你说 VFP 这个方法强大不强大?

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-04 12:56
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
GenXTab.prg 是 FoxPro 时代的产物,将近 30 年了,现在使用还存在了八哥,比如它是独占方式的,速度不快,如果有1W条记录的转置,估计至少5秒。
还在 VFP 的交叉表的技术还在发展,有人已经开发了更新版的 VFPTab 和 FastTab,1W 条记录的转置秒杀,而且功能比 GenXTab.prg 强得多。

如果谁有兴趣,你用 SQL Server 做一个比较复杂的 PIVOT,看看 VFP 是否可以做的到、做的好、做的快、做的强。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-04 13:10
快速回复:纵向的数据横向显示出来
数据加载中...
 
   



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

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