注册 登录
编程论坛 SQL Server论坛

查出两年连续不过的人sfzh和leibie,这样做对吗?请各位帮帮忙!

关小彤 发布于 2007-01-12 14:57, 1104 次点击
例如:04、05、06三个表中存放个人的信息及考试成绩。
数据库结构如下:
zkzbh 表示准考证编号
sname 表示姓名
leibie表示类别
sfzh表示身份证明号 (一个人一个sfzh)
result表示考试结果

我是这样做的
select no2006.* from no2005,no2006 where no2006.result='未通过' and no2005.result='未通过' and no2006.leibie=no2005.leibie and no2006.sfzh=no2005.sfzh
这是选出05、06两年连续不过的人的名单,并把结果插入no0506中

select no2006.* from no2004,no2006 where no2006.result='未通过' and no2004.result='未通过' and no2006.leibie=no2004.leibie and no2006.sfzh=no2004.sfzh
这是选出0406两年连续不过的人的名单,并把结果插入到no0406中

在用同样的方法得出0405两年的结果
然后选出0405连续考了两次没过06年没报名的人的名单

最后把0405连续考了两次06年没报名的人的sfzh和leibie加上

select sfzh,leibie from no0406 union select sfzh,leibie from no0506


不知道大家明白没有

[此贴子已经被作者于2007-1-12 14:58:57编辑过]

17 回复
#2
bygg2007-01-12 15:02

明白了.

#3
关小彤2007-01-12 15:05
谢谢楼上的。我这样做对吗?有问题吗?
#4
棉花糖ONE2007-01-12 15:09

select sfzh,leibie from
(
select sfzh,leibie from no05 where result='未通过'
union all
select sfzh,leibie from no04 where result='未通过'
union all
select sfzh,leibie from no06 where result='未通过'
) a group by sfzh,leibie having count(1)=2

不知道行不行,你试试吧

#5
关小彤2007-01-12 15:11

谢谢两位版主我试试看

#6
关小彤2007-01-12 15:13
jinyuzhang版主好像不对,这样查出来的结果是11288条记录。
我查的0506两年的就有11738条。
#7
关小彤2007-01-12 15:27

我知道了应该是a group by sfzh,leibie having count(1)>=2
但是查出的结果条数和我的不一样。我的是14414
你的是14478。结果不一样说明其中有一个不对。不过我没看出哪个有问题。

[此贴子已经被作者于2007-1-12 15:29:29编辑过]

#8
棉花糖ONE2007-01-12 15:30
那我也不清楚(不过我模拟了一下,我的语句和你的语句查出的结果是一样的啊)
#9
棉花糖ONE2007-01-12 15:31
a group by sfzh,leibie having count(1)>=2,怎么能是大于等于2呢,不是一个sfzh最多只能考两次吗
#10
棉花糖ONE2007-01-12 15:38
楼主你把选出的三个结果集中,sfzh相同的除去了没有.如果一个人可以考三次的话,sfzh有可能被重复选了
#11
关小彤2007-01-12 15:38
因为以前没有这样的限制,可能考过多次。所以得是>=2.但是两种办法查出的结果不一样:(
#12
关小彤2007-01-12 15:44
select sfzh,leibie from no0406 union select sfzh,leibie from no0506 已经把0406,0506中重复的删除了,
再加上0405连续考了两次06年没报名的
应该不会有重复的了
#13
Kendy1234562007-01-12 15:52

版主的代码是正确的 你的逻辑太复杂了
按照你的方式 应该是
1.选出05 06 没过的 --进结果表
2.选出 04 06 没过的 --进结果表
3.选出 04 05 没过的 --进结果表
4.假如3连败不在统计内 则去掉结果表中 所有count(*) >1 的 by sfzh lb
5.去掉重复数据

如果3连败也算的话 版主的代码最后的 =2 改成>=2就是了

#14
关小彤2007-01-12 15:56
select sfzh,leibie from no0406 union select sfzh,leibie from no0506
用union已经去掉重复的数据了。用union all 有重复的
#15
Kendy1234562007-01-12 16:13
有没有重复不要猜 你把结果集放进个临时表 group by 看一下count
你的逻辑我觉得是有问题的
#16
关小彤2007-01-12 16:27
我查过了没有重复的。而且我用斑竹的方法查了0506两年的和我的select no2006.* from no2005,no2006 where no2006.result='未通过' and no2005.result='未通过' and no2006.leibie=no2005.leibie and no2006.sfzh=no2005.sfzh 结果都不一样。
#17
关小彤2007-01-12 16:29
在这里先谢谢大家。谢谢!不过我真的没感觉那个有问题。等一下我把两个结果中不同的记录查出来看看。
#18
关小彤2007-01-12 18:04

谢谢大家。版主的那种是正确的,我的也没错。不过就是结果不一致。我也没办法了

[此贴子已经被作者于2007-1-13 9:41:21编辑过]

1