| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1946 人关注过本帖
标题:用vfp9.0稳定吗
只看楼主 加入收藏
jiguanqiang8
Rank: 1
等 级:新手上路
帖 子:154
专家分:2
注 册:2013-2-7
收藏
得分:0 
那帮我看看一下句子在6.0运行正常,9.0怎么改,谢谢了
select 品种,nvl(sum(存量),0) as 期初 from main into cursor tabchu group by 品种 where bianhao=(select max(bianhao) from main group by 罐号 where 日期<=mydate1)

      
2013-02-13 22:01
jiguanqiang8
Rank: 1
等 级:新手上路
帖 子:154
专家分:2
注 册:2013-2-7
收藏
得分:0 
系统“显示子查询返回了多条记录”,加了SET ENGINEBEHAVIOR 70 也不行
2013-02-13 22:07
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用jiguanqiang8在2013-2-13 22:01:36的发言:

那帮我看看一下句子在6.0运行正常,9.0怎么改,谢谢了
select 品种,nvl(sum(存量),0) as 期初 from main into cursor tabchu group by 品种 where bianhao=(select max(bianhao) from main group by 罐号 where 日期<=mydate1)

      
问题出在我颜色标出来的两个地方:
(1)红色部分必须放在整个语句的最后。虽然FOXPRO所有版本的各命令子句(除了命令字/词本身)都可以随意安排顺序,但在某些语句中还是有顺序讲究的。比如:SELECT-SQL。它就要求ORDER BY子句必须放在除了INTO/TO子句外的最后,也就是如果含INTO/TO子句,则ORDER BY必须是倒数第二个;若无,则ORDER BY必须是最后一个子句。且ORDER BY在整个SELECT-SQL语句中(不含子查询)只能有一个,若用UNION子句联合多个SELECT查询,则ORDER BY必须只能出现在最后一个SELECT语句中。而对于INTO/TO子句而言,必须放在整个SELECT-SQL语句的最后,不能穿插在当中。你这个案例中,把INTO子句放在了GROUP BY和WHERE子句的前面,显然是错误的。即使没有子查询中的错误,这条语句还是不能执行。
(2)很多人对于什么时候用GROUP BY子句搞不清楚。GROUP BY子句一般用在输出项有统计函数,且另外还有不含统计函数输出项(除常量外)的情况下。象你这个案例的子查询中,输出项仅有一个,虽然它包含了统计函数,但没有其它不含统计函数的项,所以不需要分组。如果分组,逻辑意义就变成了每个罐号的最大编号,当然会有多个输出记录。同时,也与你本来想表达的意思完全不一样了。你的本意是仅输出一条记录,这条记录的字段就是所有罐号的最大编号,对吧?因此,你必须把蓝色部分删除掉。

你修正这两个问题后,相信不管在6.0还是9.0版本上都能顺利输出记录了。另外,建议你不要动不动就去SET成和低版本兼容,应该把自己的思维转到9.0的查询中来,毕竟高版本的查询语句结构和用法要比低版本严谨,也更接近Oracle等大型数据库的相应语句和我们平时的思维逻辑。


[ 本帖最后由 taifu945 于 2013-2-14 12:46 编辑 ]
2013-02-14 12:34
快速回复:用vfp9.0稳定吗
数据加载中...
 
   



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

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