| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:HAVING句子无效
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:5 
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。

理解应用 WHERE、GROUP BY 和 HAVING 子句的正确顺序对编写高效的查询代码会有所帮助:
WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
GROUP BY 子句用来分组 WHERE 子句的输出。
HAVING 子句用来从分组的结果中筛选行。

对于可以在分组操作之前或之后应用的任何搜索条件,在 WHERE 子句中指定它们会更有效。这样可以减少必须分组的行数。应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。
2015-10-09 17:32
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:5 
以下是引用TZTJ在2015-10-9 16:04:05的发言:

如果换成where ,出现group by句子无效
你若是想得到大家的帮助,就把改变后的语句和出错信息都发上来,而不是简单地说一句“group by子句无效”。谁知道你的命令是怎么写的呢?当然,最好包括告诉我们你的VFP版本号。
2015-10-10 07:33
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
首先感谢各位高手关注。我的版本是VFP9.这个命令几年前用都没问题,就是系统换成windows8.
2015-10-10 09:58
kinvanhon
Rank: 5Rank: 5
来 自:战争学院
等 级:贵宾
威 望:16
帖 子:99
专家分:258
注 册:2014-10-7
收藏
得分:5 
4楼最后说的你还没看明白,group by 学号,姓名
2015-10-10 13:11
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
首先说一声感谢。问题暂时解决,但我总有些困惑,过去使用都没问题,闲置几年后拿来用就有不少问题。
比如:
 xh1=alltrim(thisform.text6.value)
 xh2=alltrim(thisform.text7.value)
 kcs=val(alltrim(thisform.text3.value))
 select distinct * from cj2!xs where between(学号,xh1,xh2) order by 学号 into cursor kao
 得到是一个记录都没有,明知表xs是有记录的,我总弄不白,出差错在哪里,同样前几年都用的,根本没问题
2015-10-10 20:20
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
经过不断尝试,把where换成having又可以啦。
2015-10-11 08:36
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
由于系统更换,我原来做的软件都很多异常或不能正常使用
2015-10-11 08:39
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用TZTJ在2015-10-10 20:20:27的发言:

首先说一声感谢。问题暂时解决,但我总有些困惑,过去使用都没问题,闲置几年后拿来用就有不少问题。
比如:
 xh1=alltrim(thisform.text6.value)
 xh2=alltrim(thisform.text7.value)
 kcs=val(alltrim(thisform.text3.value))
 select distinct * from cj2!xs where between(学号,xh1,xh2) order by 学号 into cursor kao
 得到是一个记录都没有,明知表xs是有记录的,我总弄不白,出差错在哪里,同样前几年都用的,根本没问题

问题可能出在你的BETWEEN里,xh1、xh2都是去掉两头空格的,而你的学号字段却没有。一旦你所有的学号内容前面都有一个空格,那么肯定是查不出记录的。另外,用VAL()转换成数值时无需用ALLTRIM()先去掉空格,直接用VAL()套上字符变量就行啦。
2015-10-11 20:49
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用TZTJ在2015-10-11 08:36:24的发言:

经过不断尝试,把where换成having又可以啦。

我觉得你还是没搞清楚这两者的区别,并且还懒得去搞清楚。反正要用时就两个试一下,哪个出得来就用哪个,都出不来时就要晕了。
2015-10-11 20:51
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
感谢关注和指点!通过交流使我学到不少东西
2015-10-11 21:01
快速回复:HAVING句子无效
数据加载中...
 
   



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

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