标题:求助:用select语句找出表中符合条件的记录
只看楼主
bdx808
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-5-9
结帖率:100%
已结贴  问题点数:20 回复次数:7 
求助:用select语句找出表中符合条件的记录
有一表tb,见附件(主要字段名释义:xx学校,zydm专业代码,zymc专业名称,sxs上线数,zdf最低分),vfp9.0环境,
请用select语句找出sxs不为0时、zdf不全相等、xx相同、zymc相同(但zydm不同)且行数大于2的所有记录,但bz为A、B那两条记录除外:A那行的sxs=0、B行的sxs#0,但A行的zdf大于B行的zdf,求得的结果如表tb2。
tb-tb2.rar (641 Bytes)


[此贴子已经被作者于2022-7-22 16:25编辑过]

搜索更多相关主题的帖子: select 条件 语句 表中 记录 
2022-07-22 16:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
zdf不全相等 是什么意思
zymc相同,为何zydm不相同
楼主所说的要求看不明白

坚守VFP最后的阵地
2022-07-22 16:51
bdx808
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-5-9
得分:0 
就是说专业名称zymc相同的几行,只要最低分zdf不全相等
zymc相同,为何zydm不相同,这点儿确实和正常的不一样,正常情况下一定是一样的,但这个不一样,虽然不合理,却是事实(相当于相同专业不同区域)暂时无法改变

[此贴子已经被作者于2022-7-22 17:00编辑过]

2022-07-22 16:58
talkrobin
Rank: 2
等 级:论坛游民
帖 子:38
专家分:19
注 册:2022-5-15
得分:0 
请用select语句找出sxs不为0时、zdf不全相等、xx相同、zymc相同(但zydm不同)且行数大于2的所有记录,

TB2表中第1行和第4行都为0??   (sxs不为0时)
机电一体化  一共只有 xx相同的只有3行,为何TB2表内有4行???        (xx相同)

可能是我的理解有问题,还请回复
或把你的问题或说明的更详细一些.

(我是初学者,如说错了,还请包涵)

2022-07-23 12:11
bdx808
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-5-9
得分:0 
应该是我没有说清楚,意思是要找出同一个xx学校、同一zymc专业名称的sxs不全为0时,比如:前两行记录:虽然专业名称一样、都是中外简史,但sxs都为0就不需要找出,zymc为机电一体化那几行,其中有两行的sxs是5和10、不全为0,不知道这样说是否叙述清楚了,我再想一下更好的表述,想好后再回复,先谢谢!
2022-07-23 15:30
bdx808
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-5-9
得分:0 
请用select语句找出同一学校xx、相同专业名称zymc而上线数sxs不全为0、最低分zdf不全相等、专业名称zymc行数大于2的所有记录(结果如表tb2),但bz为A、B、C、D那几条记录除外:A行的sxs=0、B行的sxs#0,但A行的zdf大于B行的zdf;C、D那两条记录zdf相等也不需要找出(本表中zydm可有可无,不需要),简单说就是:
xx相同、zymc相同,sxs不全为0,如果sxs为0、其对应的zdf不小于sxs不为0的zdf
如果sxs都为0或zdf都相等,即使xx相同、zymc相同也不需要找出

不知道这次说清楚没有,对于这种同一表内不同行的比较实在不会用select处理,实在不能用select处理用循环代码也行,请大神出手,多谢了!

[此贴子已经被作者于2022-7-23 16:05编辑过]

2022-07-23 15:58
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:20 
可按如下步骤分解求结果
程序代码:
Select zymc from tb group by zymc having Count(*)>1 and Max(sxs)>0 into cursor mc

Select a.zymc, Max(a.zdf) as zdf ;
    from tb a ;
    inner join mc b on a.zymc == b.zymc ;
    where a.sxs = 0 ;
    group by a.zymc ;
    into cursor sxs0

Select a.zymc, Max(a.zdf) as zdf ;
    from tb a ;
    inner join mc b on a.zymc == b.zymc ;
    where a.sxs > 0 ;
    group by a.zymc ;
    into cursor sxs1

Select a.* from tb a ;
    inner join ( ;
        Select a.zymc from sxs1 a ;
        inner join sxs0 b on a.zymc == b.zymc ;
        where a.zdf > b.zdf ;
    ) b on a.zymc == b.zymc

2022-07-23 17:02
bdx808
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-5-9
得分:0 
非常感谢!
2022-07-23 18:20



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




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

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