| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1074 人关注过本帖
标题:救助,SELECT 出现 建立排序键错误
只看楼主 加入收藏
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
收藏
得分:0 
以下是引用babyqi在2013-11-26 16:13:56的发言:

用DIST就出问题,现在改用 GROUP BY 子句,搞定了。
是的,刚才做了测试,254的字段,如果字段实际内容 <=239字符, dist 就没问题,如果>=240字符,使用 dist 就有问题
以上是在 VFP9。0中测试,但在VFP6。0反而没这问题.

[ 本帖最后由 bccn0906 于 2013-11-26 16:25 编辑 ]
2013-11-26 16:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:2 
那就不要用DISTINCT 参数,用其它方法

坚守VFP最后的阵地
2013-11-26 16:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
把这个字段的内容贴几条看看
或者设置排序方式

坚守VFP最后的阵地
2013-11-26 16:38
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
收藏
得分:0 
以下是引用sdta在2013-11-26 16:38:42的发言:

把这个字段的内容贴几条看看
或者设置排序方式
试试
CREATE CURSOR t1 (f1 c(254))
INSERT INTO t1 (f1) VALUES (REPLICATE('1',240))&&出错
*INSERT INTO t1 (f1) VALUES (REPLICATE('1',239)) &&不出错
SELECT distinct f1 FROM t1


[ 本帖最后由 bccn0906 于 2013-11-26 18:07 编辑 ]
2013-11-26 16:45
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:2 
用关键字DISTINCT的时候,表文件会先排序,然后剔除输出列内容都相同的重复行,只保留其中一行。由于VFP9.0自身的原因,对于C、V两类型的字段内容达到240个字符后,排序时会发生错误,于是就产生了“建立排序键错误”的提示。
2013-11-27 08:33
babyqi
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2012-12-6
收藏
得分:0 
另外,遇到个奇怪的问题,SELECT DIST 字段 FROM 表 INTO CURSOR 临时表 READWRITE,之后使用 ALTER TABLE 临时表 ADD COLUMN 新字段 C(10),可行。
但用 SELECT 字段 FROM 表 GROUP BY 字段 INTO CURSOR 临时表 READWRITE ,之后使用 ALTER TABLE 就会出现 “无效的临时表操作”。
2013-11-27 09:40
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
收藏
得分:0 
VFP9.0:
长度>=240的字段,如果字段实际内容 》=240字符,那么这字段用于 SELECT 子句 ORDER BY、GROUP BY、distinct 中都会出错

CREATE CURSOR t1 (f1 c(254),f2 n(2))
INSERT INTO t1 (f1) VALUES (REPLICATE('1',240))
SELECT distinct f1 FROM t1
SELECT * FROM t1  ORDER BY f1
SELECT f1,sum(f2) FROM t1  GROUP BY BY f1

2013-11-27 09:48
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用babyqi在2013-11-27 09:40:26的发言:

另外,遇到个奇怪的问题,SELECT DIST 字段 FROM 表 INTO CURSOR 临时表 READWRITE,之后使用 ALTER TABLE 临时表 ADD COLUMN 新字段 C(10),可行。
但用 SELECT 字段 FROM 表 GROUP BY 字段 INTO CURSOR 临时表 READWRITE ,之后使用 ALTER TABLE 就会出现 “无效的临时表操作”。
你大概在VFP上很少用数学运算吧?有个奇葩的事与你分享,说个简单的:数学上,-1的5次方再开3次方,值还是-1,对吧?那么,VFP中没有专门用于开5次方的函数或运算符,就得用数学上的等式转换,即,转换成(-1)^(3/5)对吧?然后,你可以在命令窗口中输入“?(-1)^(3/5)”试试,看看会有什么反应(不含两侧双引号)。
2013-11-27 10:02
babyqi
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2012-12-6
收藏
得分:0 
以下是引用taifu945在2013-11-27 10:02:15的发言:

你大概在VFP上很少用数学运算吧?有个奇葩的事与你分享,说个简单的:数学上,-1的5次方再开3次方,值还是-1,对吧?那么,VFP中没有专门用于开5次方的函数或运算符,就得用数学上的等式转换,即,转换成(-1)^(3/5)对吧?然后,你可以在命令窗口中输入“?(-1)^(3/5)”试试,看看会有什么反应(不含两侧双引号)。



?(-1)^(3/5)出错了,查了一下,好像负数开方得出来的虚数,估计是这个问题造成的出错吧?

请教,这和临时表操作,有何关系?

[ 本帖最后由 babyqi 于 2013-11-27 10:14 编辑 ]
2013-11-27 10:07
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
收藏
得分:0 
以下是引用babyqi在2013-11-27 09:40:26的发言:

另外,遇到个奇怪的问题,SELECT DIST 字段 FROM 表 INTO CURSOR 临时表 READWRITE,之后使用 ALTER TABLE 临时表 ADD COLUMN 新字段 C(10),可行。
但用 SELECT 字段 FROM 表 GROUP BY 字段 INTO CURSOR 临时表 READWRITE ,之后使用 ALTER TABLE 就会出现 “无效的临时表操作”。
按照你所说的,我怎么弄也弄不出你的那错误。我也想知道其中的原因,能发个表上来看看吗
2013-11-27 10:51
快速回复:救助,SELECT 出现 建立排序键错误
数据加载中...
 
   



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

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