标题:表中只有某二列相同(报名序号,姓名工)其它都不相同的重复记录,我想把只 ...
只看楼主
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
结帖率:79.3%
已结贴  问题点数:20 回复次数:27 
表中只有某二列相同(报名序号,姓名工)其它都不相同的重复记录,我想把只取一条记录,能用select DISTINCT子句?
FoxPro入门手册(2014第四次修订水印版)中:select 语句中对重复行的介绍:
重复行,是指所有结果列的值都完全相同的行, 只要有一列的值不同, 就不算重复行。

现有表中报名序号,姓名相同的,其它几列不同的重复记录,
如 51016001 张三 90 80  70
   51016001  张三 100 90 50
1)现我只想取一条记录来统计报名人数,能否用 select distinct bmxh,xm from xx?
2)此条:SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM xk) GROUP BY bmd 为什么是语法错误?
 我先取掉重复后的表为中间表,然后再对中间表进分组统计.
 改为如下是正确的
select DISTINCT bmxh,bmd FROM xk into table ls1
select bmd,count(*) from ls1 group by bmd
当然select bmd,count(distinct bmxh) from xk group by bmd 是书上介绍的

[ 本帖最后由 sylknb 于 2015-9-24 11:10 编辑 ]
2015-09-24 10:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
测试一下看看结果
2015-09-24 11:00
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM [xk$]) GROUP BY bmd 此条语句在excel 2003中 oledb 查询中能正确运行。为什么在VFP9中
SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM xk) GROUP BY bmd 不能运行?
2015-09-24 11:12
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
得分:3 
用唯一性索引再复制就OK了。
inde on allt(str(报名序号))+allt(姓名) to xhxm uniq
copy to abc
2015-09-24 14:18
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:3 
对 索引要唯一
2015-09-24 15:27
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:3 
select DISTINCT bmxh,bmd FROM xk into table ls1  &&OK,但只能显示bmxh,bmd行,其他的信息没显示

网上说的,可以在DISTINCT(),如
select DISTINCT(bmxh,bmd),数学 FROM xk into table ls1 &&错误的,我在VFP9和SQL2000上都是错误的。

还有的人说,在表上加个自增字段ID,
SELECT * FROM XK WHERE ID IN(SELECT MIN(ID) ID FROM XK GROUP BY bmxh,bmd)

难道,只有这样才能根据某几项相同的值,显示多个字段?
2015-09-24 17:47
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
得分:3 
我现在对select  也是有点晕晕的...以前能用的现在不能用了.......改起来好烦人
其实就是现在的各种表达和设置要具体些,规则些和详细些了.不像以前的那么随便了
就好像以前可以用like 现在只能用==了....哈哈

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2015-09-24 20:25
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:3 
以下是引用sylknb在2015-9-24 11:12:43的发言:

SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM [xk$]) GROUP BY bmd 此条语句在excel 2003中 oledb 查询中能正确运行。为什么在VFP9中
SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM xk) GROUP BY bmd 不能运行?
在不同环境下select语法是有些区别的,不一定能够直接照搬照套。

活到老,学到老! http://www. E-mail:hu-jj@
2015-09-24 20:34
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:3 
以下是引用sylknb在2015-9-24 10:28:42的发言:

FoxPro入门手册(2014第四次修订水印版)中:select 语句中对重复行的介绍:
重复行,是指所有结果列的值都完全相同的行, 只要有一列的值不同, 就不算重复行。

现有表中报名序号,姓名相同的,其它几列不同的重复记录,
如 51016001 张三 90 80  70
   51016001  张三 100 90 50
1)现我只想取一条记录来统计报名人数,能否用 select distinct bmxh,xm from xx?
2)此条:SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM xk) GROUP BY bmd 为什么是语法错误?
 我先取掉重复后的表为中间表,然后再对中间表进分组统计.
 改为如下是正确的
select DISTINCT bmxh,bmd FROM xk into table ls1
select bmd,count(*) from ls1 group by bmd
当然select bmd,count(distinct bmxh) from xk group by bmd 是书上介绍的
你看书不仔细,嘿嘿。书上写了:FROM子句中的子查询后面是一定要有别名的。你不起个名字,当然就是语法错误了。你把这条语句改为:SELECT bmd,COUNT(*) FROM (select DISTINCT bmxh,bmd FROM xk) T1 GROUP BY bmd,就不会语法错误了。
2015-09-25 08:15
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:0 
另外,楼主的第(1)个要求,可以用 select count(distinct bmxh) 总人数 from xx 来实现。
2015-09-25 08:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-457615-1-1.html




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

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