注册 登录
编程论坛 VFP论坛

求助:用select语句找出表中符合条件的记录

bdx808 发布于 2022-07-22 16:24, 1290 次点击
有一表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。
只有本站会员才能查看附件,请 登录


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

7 回复
#2
sdta2022-07-22 16:51
zdf不全相等 是什么意思
zymc相同,为何zydm不相同
楼主所说的要求看不明白
#3
bdx8082022-07-22 16:58
就是说专业名称zymc相同的几行,只要最低分zdf不全相等
zymc相同,为何zydm不相同,这点儿确实和正常的不一样,正常情况下一定是一样的,但这个不一样,虽然不合理,却是事实(相当于相同专业不同区域)暂时无法改变

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

#4
talkrobin2022-07-23 12:11
请用select语句找出sxs不为0时、zdf不全相等、xx相同、zymc相同(但zydm不同)且行数大于2的所有记录,

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

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

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

#5
bdx8082022-07-23 15:30
应该是我没有说清楚,意思是要找出同一个xx学校、同一zymc专业名称的sxs不全为0时,比如:前两行记录:虽然专业名称一样、都是中外简史,但sxs都为0就不需要找出,zymc为机电一体化那几行,其中有两行的sxs是5和10、不全为0,不知道这样说是否叙述清楚了,我再想一下更好的表述,想好后再回复,先谢谢!
#6
bdx8082022-07-23 15:58
请用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编辑过]

#7
csyx2022-07-23 17:02
可按如下步骤分解求结果
程序代码:
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

#8
bdx8082022-07-23 18:20
非常感谢!
1