| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5875 人关注过本帖
标题:用查询,可以把行变成列吗?
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用sylknb在2017-8-28 15:57:24的发言:
SCAN  &&这里在用scan语句前必须打开有关表,并逐条扫描,这里的表是哪一个?是tt表还是tj表?
    REPLACE ("tj."+ALLTRIM(tt.课程)) WITH tt.成绩
ENDSCAN

就是执行 SCAN 命令时当前工作区,这时是tt
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-08-28 16:45
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1527
专家分:180
注 册:2006-6-3
收藏
得分:0 
吹水佬:
当前表是Tt,Tt表当指针在第一个学号为2001,子表TJ指针移到学号2001,Tj表中化学成绩用Tt表中化学对应的成绩80来替代,这句好理介,
            当指针移到第二个学号为2001时,子表Tt指针移到学号哪一个上?还是移到原来的学号2001还是学号2002?
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-08-28 17:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:0 
最好自己观察一下,要坚信眼前,不要迷信吹水佬。
将:
SCAN
    REPLACE ("tj."+ALLTRIM(tt.课程)) WITH tt.成绩
ENDSCAN
改为这样看看:
SCAN
    ? "tt", RECNO("tt"), tt.学号
    ? "tj", RECNO("tj"), tj.学号
    ?
ENDSCAN
2017-08-28 18:01
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1527
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2017-8-28 18:01:13的发言:

最好自己观察一下,要坚信眼前,不要迷信吹水佬。
将:
SCAN  
    REPLACE ("tj."+ALLTRIM(tt.课程)) WITH tt.成绩
ENDSCAN
改为这样看看:
SCAN  
    ? "tt", RECNO("tt"), tt.学号
    ? "tj", RECNO("tj"), tj.学号
    ?
ENDSCAN
有了 ? "tt", RECNO("tt"), tt.学号
    ? "tj", RECNO("tj"), tj.学号
    ?
产生了图示,明白。
图片附件: 游客没有浏览图片的权限,请 登录注册

以前学习关联知识,练习的东西都是二个表之间是一对一关联,现在的例子是tt中多个记录与TJ中的一条记录,多对一。我一直困或多条记录怎么与一条记录关联。
谢谢!忽然开朗。

[此贴子已经被作者于2017-8-29 05:47编辑过]

2017-08-29 05:43
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1527
专家分:180
注 册:2006-6-3
收藏
得分:0 
sdta班主:
请教如下二个问题

create cursor t4 (学号 c(4),姓名 c(8),&lcstr)
index on 学号+姓名 tag xhxm         &&上面是空表,只有字段没有值,index on 学号+姓名 tag xhxm怎么可索引?
* 结束
* 数据处理
select t2
set relation to 学号+姓名 into "t4"
scan
    km=alltrim(t2.课目)
    if found("t4")
        replace (km) with t2.成绩 in "t4" &&这里只替换t4对应的t2.成绩,t4表中学号与姓名字段值哪里来?
    else
        insert into t4 (学号,姓名,&km) values (t2.学号,t2.姓名,t2.成绩)
    endif
endscan
2017-08-29 09:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9796
专家分:26886
注 册:2012-2-5
收藏
得分:0 
没有值也可以索引
两表建立临时关联
if found() && 找到与索引对应的记录,则替换相应的字段值
    replace (km) with t2.成绩 in "t4"
else && 没找到与索引对应的记录,则添加新纪录
    insert into t4 (学号,姓名,&km) values (t2.学号,t2.姓名,t2.成绩)
endif

坚守VFP最后的阵地
2017-08-29 09:52
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1527
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用sdta在2017-8-29 09:52:17的发言:

没有值也可以索引
两表建立临时关联
if found() && 找到与索引对应的记录,则替换相应的字段值
    replace (km) with t2.成绩 in "t4"
else && 没找到与索引对应的记录,则添加新纪录
    insert into t4 (学号,姓名,&km) values (t2.学号,t2.姓名,t2.成绩)
endif

sdta班主:
是不是这样理介对否?
create cursor t4 (学号 c(4),姓名 c(8),&lcstr)
index on 学号+姓名 tag xhxm
根据上面的代码建立了t4表,但里面是无记录
if found(t4)
刚开始时t4中是空记录没没找到与索引对应的记录,则执行else 后面的insert into t4 (学号,姓名,&km) values (t2.学号,t2.姓名,t2.成绩) 这条语名句,有t4中插入"1001","张三","数学",102,
然后再回到循环开始处,作if found(t4)判断,此时在t4表已有刚才插入的一条记录学号1001,姓名张三,符合要求,则替换相应的字段值,语文的值102。
同理在t4中插入”1002","李四","数学",119,再替换语文的108。
上面理介如否正确,请你指正。
2017-08-29 10:55
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9796
专家分:26886
注 册:2012-2-5
收藏
得分:0 
回复 37楼 sylknb
完全正确
insert into cj values ("2001","语文",86)
insert into cj values ("2002","语文",87)
insert into cj values ("2003","语文",88)
insert into cj values ("2001","数学",85)
insert into cj values ("2002","数学",84)
insert into cj values ("2003","数学",83)
insert into cj values ("2001","英语",89)
insert into cj values ("2002","英语",81)
insert into cj values ("2003","英语",80)

[此贴子已经被作者于2017-8-29 11:02编辑过]


坚守VFP最后的阵地
2017-08-29 11:01
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1527
专家分:180
注 册:2006-6-3
收藏
得分:0 
sdta
谢谢不吝指教。
2017-08-29 11:28
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:601
专家分:1770
注 册:2017-7-16
收藏
得分:0 
有句古话:[无招胜有招]
你的问题不用写代码的,只要用[交叉表查询]就可以了。
2018-02-18 08:51
快速回复:用查询,可以把行变成列吗?
数据加载中...
 
   



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

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