| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1831 人关注过本帖
标题:如何排序?
只看楼主 加入收藏
xh_rz
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2013-3-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
如何排序?
将表中记录按专业分别排序,并将结果输出到临时表中,第一次我使用 SELECT * FROM A INTO CURSOR B ORDER BY 专业 得到的顺序并不是我想到的。第二次分多次抽取记录 然后合并但是在使用appe from 时系统提示临时表为只读文件。有何办法实现?(专业排序为 建筑、结构、水电、暖通、其他等几类 即不是升序也不是降序)
搜索更多相关主题的帖子: 记录 如何 专业 
2013-03-20 16:28
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:15 
SELECT * FROM A INTO CURSOR B  READWRITE
加上这 READWRITE 就可读写了

这样行不?
SELECT *,ICASE(ALLTRIM(专业)='建筑',1,ALLTRIM(专业)='结构',2,ALLTRIM(专业)='水电',3,ALLTRIM(专业)='暖通',4,ALLTRIM(专业)='其他',5,9) 排序 from a  INTO CURSOR B  READWRITE order by 排序


[ 本帖最后由 kiff 于 2013-3-20 16:41 编辑 ]
2013-03-20 16:32
xh_rz
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2013-3-4
收藏
得分:0 
回复 2楼 kiff
我就是求一个按照建筑、结构、水电、暖通、其他排序的临时表。没有排序字段 专业字段包含:建筑、结构、水电、暖通、其他  专业字段内容是有重复的。

[ 本帖最后由 xh_rz 于 2013-3-20 16:45 编辑 ]
2013-03-20 16:44
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
以下是引用xh_rz在2013-3-20 16:44:18的发言:

我就是求一个按照建筑、结构、水电、暖通、其他排序的临时表。没有排序字段 专业字段包含:建筑、结构、水电、暖通、其他
知道 没有排序字段  ,这排序字段是ICASE()这表达式 临时字段

[ 本帖最后由 kiff 于 2013-3-20 16:47 编辑 ]
2013-03-20 16:46
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:5 
VFP只能做升序或降序排列,如果想用自定义排序只有这样:
1、先用SELECT-SQL得到所有专业的数量(COUNT(DISTINCT 专业字段名)函数统计出),放在一个2维数组里;
2、从1到这个数量建立FOR...NEXT循环,按你需要的顺序一一提取出数据(比如:循环变量为1时,SELECT语句提取专业为“建筑”的,为2时,提取专业为“结构”的...)。那么,为了循环套里面的代码写起来方便,你可以事先定义一个1维数组,比如:AA(专业数量),里面按你的顺序事先放好专业名。这样,循环里的条件就可以写成:WHERE 专业字段名=AA(I)这种形式了(注:假设I为循环变量名);
3、最后,按序拼合这些循环出来的所有数据,就是你要的结果。

至于,你提取出来的数据用什么方法临时存放,你自己决定。一般,可以用临时表(INTO CURSOR)、临时正式表(INTO TABLE)、二维数组(INTO ARRAY)等方式。最后,弄一个正式表文件,把数据弄进去。不知道我的思路你看明白了没。
2013-03-20 16:51
xh_rz
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2013-3-4
收藏
得分:0 
回复 4楼 kiff
谢谢 要的就是这个结果。不过我看不懂你的语句  照葫芦画飘 vfp9.0通过  非常感谢。
2013-03-20 16:54
xh_rz
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2013-3-4
收藏
得分:0 
回复 5楼 taifu945
谢谢 思路我看懂了 就是不知道如何拼接
2013-03-20 16:58
xh_rz
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2013-3-4
收藏
得分:0 
以下是引用kiff在2013-3-20 16:32:31的发言:

SELECT * FROM A INTO CURSOR B  READWRITE
加上这 READWRITE 就可读写了

这样行不?
SELECT *,ICASE(ALLTRIM(专业)='建筑',1,ALLTRIM(专业)='结构',2,ALLTRIM(专业)='水电',3,ALLTRIM(专业)='暖通',4,ALLTRIM(专业)='其他',5,9) 排序 from a  INTO CURSOR B  READWRITE order by 排序
icase 最后的 5,9是什么意思
2013-03-20 17:02
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
我帮你用 5楼的方法实现一下,我是用临时表
CREATE CURSOR 排序 (排序 int,专业 c(20))
INSERT INTO 排序 (排序,专业) VALUES (1,'建筑')
INSERT INTO 排序 (排序,专业) VALUES (2,'结构')
INSERT INTO 排序 (排序,专业) VALUES (3,'水电')
INSERT INTO 排序 (排序,专业) VALUES (4,'暖通')
INSERT INTO 排序 (排序,专业) VALUES (5,'其他')

SELECT a.*,b.排序 FROM a,排序 b WHERE a.专业==b.专业  INTO CURSOR c  READWRITE order by b.排序



[ 本帖最后由 kiff 于 2013-3-20 17:45 编辑 ]
收到的鲜花
  • tlliqi2013-03-20 17:10 送鲜花  20朵   附言:专业 加分
2013-03-20 17:04
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
以下是引用xh_rz在2013-3-20 17:02:07的发言:

icase 最后的 5,9是什么意思
icase 不在以上专业的,就用 9 啊
2013-03-20 17:06
快速回复:如何排序?
数据加载中...
 
   



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

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