主题:请教:VFP9.0 GROUP BY子句的用法
zhaoyufei
[专家分:550] 发布于 2009-06-05 22:19:00
我原来用VFP7.0做的东西,内有SELECT查询语句,其中用到GROUP BY子句,很好用,比如有
姓名,性别,年龄,单位 四个字段,我GROUP BY 姓名,就可以把姓名重复的记录过滤掉,而且保留的唯一记录是记录号最大的,即后面的新纪录,而在VFP9.0中此语句报错,我不知如何再用它,特请教各位老师,先谢
我原来的语句select * from xxx where ? into table 'yyy' group by 姓名
最后更新于:2009-06-05 22:26:00
回复列表 (共6个回复)
沙发
lbscyb [专家分:4780] 发布于 2009-06-07 21:38:00
group by 姓名,性别,年龄,单位
板凳
liupeisong [专家分:2340] 发布于 2009-06-08 14:05:00
use a
SET UNIQUE ON
INDEX on dm TO a
COPY TO aa
以上代码在表aa不再有dm重复的值,不受版本限制!
另外:楼主要求记录号最大的,这个恐怕不妥,数据库表中的记录号不应该起这个作用,任何操作的结果集合都不应该和记录号有关!这个任何一本数据库书中都有讲的
3 楼
zhaoyufei [专家分:550] 发布于 2009-06-08 22:29:00
[quote]group by 姓名,性别,年龄,单位[/quote]
谢谢,如果4个字段都GROUP BY了,那还不如DISTINCT,我的目的是只排除姓名重复的记录,例如
1 张三 男 50岁 合肥工业大学物理系
2 张三 男 55岁 合肥工业大学化学系
......
经过SELECT GROUP BY 姓名后,第一条记录被过滤掉,第二条记录保存
4 楼
zhaoyufei [专家分:550] 发布于 2009-06-08 22:40:00
[quote]另外:楼主要求记录号最大的,这个恐怕不妥,数据库表中的记录号不应该起这个作用,任何操作的结果集合都不应该和记录号有关!这个任何一本数据库书中都有讲的[/quote]
谢谢,我不是要求记录号最大的,我的意思是,当姓名相同时,保留后面的记录,例如
张三2007年参加一个会议,登记了基本信息,2008年,2009年都如此,那我现在给张三发信,显然要使用2009年的信息,而李四可能2007年参加,2008年参加,2009年没有参加,那我给李四发信,显然使用2008年的信息,这样就是记录号最大的,在VFP7.0中,SELE 语句中加GROUP BY 姓名 很容易达到这个效果
SET UNIQUE ON,很好用,如果保存最下面的记录,可以先把它倒过来,谢谢
目的达到了,但group by还是不会用
5 楼
lbscyb [专家分:4780] 发布于 2009-06-11 21:44:00
GROUP BY 子句指定一个或多个用来分组查询返回行的列。列引用自 SQL SELECT 语句列表,除聚集表达式之外,必须包含在 GROUP BY 子句中。
那是你不清楚GROUP BY 子句的用法,从VFP8.0以后就更改了,使之符合SQL标准
6 楼
rzhang168 [专家分:360] 发布于 2009-06-12 10:49:00
加上
SET ENGINEBEHAVIOR 70 試試
我来回复