| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4099 人关注过本帖
标题:如何把纵向记录变成横向记录?
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
上面生成的表,都是临时表,如果你要生成 DBF ,
改 into CURSOR ls1 为 into table ls1

2017-03-11 13:01
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
mywisdom88
谢谢!
其中有的代码不太明的班主的思路,请指教一下:

   SELECT IIF(ISNULL(k1.km1),'',k1.km1) as km1,IIF(ISNULL(k1.km1mc),'',k1.km1mc) as km1mc,IIF(ISNULL(k2.km2),'',k2.km2) as km2,IIF(ISNULL(k2.km2mc),'',k2.km2mc) as km2mc;
    FROM (select Code as km1,Name as km1mc,space(3) as km2,space(40) as km2mc,recn() as rn from tb_ls1)k1 ;
    left join (select space(3) as km1,space(40) as km1mc,Code as km2,Name as km2mc,recn() as rn from tb_ls2)k2 on k1.rn=k2.rn ;
    into CURSOR ls1

讲一下整个思路好吗?上面中加上space(3)起什么作用?
2017-03-11 14:13
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
sdta:
可以参考:https://blog.bccn.net/sdta/16715 无法链接上 IE不兼容
2017-03-11 14:15
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9802
专家分:26906
注 册:2012-2-5
收藏
得分:10 
回复 13楼 sylknb
Note 行转列
clear all
create cursor t2 (学号 c(4),姓名 c(8),课目 c(10),成绩 n(3))
insert into t2 values ("1001","张三","数学",102)
insert into t2 values ("1001","张三","语文",120)
insert into t2 values ("1002","李四","数学",119)
insert into t2 values ("1002","李四","语文",108)
 
select distinct 课目 from t2 into array ajg
 
* 创建临时表结构及索引
lcstr=""
for lnI=1 to alen(ajg,1)
    lcstr=lcstr+iif(empty(lcstr),"",",")+alltrim(ajg[lnI,1])+" N(3)"
endfor
create cursor t4 (学号 c(4),姓名 c(8),&lcstr)
index on 学号+姓名 tag xhxm
* 结束 *
 
* 数据处理
select t2
set relation to 学号+姓名 into "t4"
scan
    km=alltrim(t2.课目)
    if found("t4")
        replace (km) with t2.成绩 in "t4"
    else
        insert into t4 (学号,姓名,&km) values (t2.学号,t2.姓名,t2.成绩)
    endif
endscan
set relation to
select t4
browse

坚守VFP最后的阵地
2017-03-11 15:33
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:19
帖 子:271
专家分:520
注 册:2007-8-11
收藏
得分:0 
这是要做树形结构的表吗?结构好像不对啊。
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-11 20:31
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
xinjie
你发的东西,发错了地方
2017-03-11 21:05
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
回复 12楼 sylknb
(select Code as km1,Name as km1mc,space(3) as km2,space(40) as km2mc,recn() as rn from tb_ls1)k1
其中:
()内的是1个子查询,目的是匹配行号,
k1就是()内的查询结果的别名,其效果就是相当1个表 K1
space(3) as Km2,就是字段 km2的值是3个空格,目的是匹配 km1,也就是 Code字段,因为他是 C(3)
select space(3) as km1,space(40) as km1mc,Code as km2,Name as km2mc,recn() as rn from tb_ls2
意思和上面的相同
IIF(ISNULL(k1.km1),'',k1.km1) as km1
就是如果 k1.km1 字段是null值,就变为'',空,如果不这样处理,就会显示 .NULL.
所以,我建议你 Code 字段改为字符串,如果你字段是 数值,那就这样,
IIF(ISNULL(k1.km1),0,k1.km1) as km1
他就是显示0





[此贴子已经被作者于2017-3-11 21:11编辑过]

2017-03-11 21:06
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:19
帖 子:271
专家分:520
注 册:2007-8-11
收藏
得分:0 
以下是引用sylknb在2017-3-11 21:05:21的发言:

xinjie
你发的东西,发错了地方

他明显是要创造一个树形结构的表。按楼主自己的想法得到的表结构,编程的时候,麻烦死。
2017-03-11 21:20
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9802
专家分:26906
注 册:2012-2-5
收藏
得分:0 
SQL命令不会用,就不要用吗,代码看不懂,后期维护也是问题。还是扎扎实实学点VFP的基础知识吧。SQL命令也不是万能的,有折腾SQL命令的时间,问题早解决了。

坚守VFP最后的阵地
2017-03-11 22:56
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
请教 SDTA有关二库关联的知识
以下是引用sdta在2017-3-11 15:33:36的发言:

Note 行转列
clear all
create cursor t2 (学号 c(4),姓名 c(8),课目 c(10),成绩 n(3))
insert into t2 values ("1001","张三","数学",102)
insert into t2 values ("1001","张三","语文",120)
insert into t2 values ("1002","李四","数学",119)
insert into t2 values ("1002","李四","语文",108)
  
select distinct 课目 from t2 into array ajg
  
* 创建临时表结构及索引
lcstr=""
for lnI=1 to alen(ajg,1)
    lcstr=lcstr+iif(empty(lcstr),"",",")+alltrim(ajg[lnI,1])+" N(3)"
endfor
create cursor t4 (学号 c(4),姓名 c(8),&lcstr)
index on 学号+姓名 tag xhx
m
* 结束 *
  
* 数据处理
select t2
set relation to 学号+姓名 into "t4"
scan
    km=alltrim(t2.课目)
    if found("t4")
        replace (km) with t2.成绩 in "t4"
    else
        insert into t4 (学号,姓名,&km) values (t2.学号,t2.姓名,t2.成绩)
    endif
endscan
set relation to
select t4
browse
有关二库关联以前学的时候,子表要索引,关联后当前库为父表,被关联的为子表,然后用子表中某字段的记录去替换父表中某字段的记录。你这里的父表是什么?子表是什么?
create cursor t4 (学号 c(4),姓名 c(8),&lcstr)
index on 学号+姓名 tag xhxm
从代码看这是子表t4
-----------------------
select t2
set relation to 学号+姓名 into "t4"  
从代码看这里是父表t2去与子表“t4”去关联
----------------------
if found("t4")
        replace (km) with t2.成绩 in "t4"
从代码看这里是用父表的值去更新子表
我有点搞糊涂了,请您指教。如何来理介你的代码?
2017-03-12 11:21
快速回复:如何把纵向记录变成横向记录?
数据加载中...
 
   



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

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