迈克学摇滚 传奇:会SQL2000的进来

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 02:20:49
谁能帮我写个sql的查找筛选语句
如:我有报名表,里面有姓名,准考证,报考科目三个列,报考科目里为课程代码.假如代码为1到9,每个数代表一个课程,现在是有些学生报考科目里报有1门课程或者2门或者3门或者4门等更多,现在要问的是,分别查找出所有报考1门的有多少,报考3门的有多少?其它很简单,各位专家们帮帮忙,写个语句出来
select count(*) where 姓名='张三' and 科目代号='1' 这个不符我的问题要求吧
我的意思是查出报考过3门科目代号的所有学生

我指的是报过3门科目的(意思是随意3个科目代号)

就好比报过的科目代号大于3门以上

btok你好,假设我要查报考过4门的学生
select * from 报名表 where len(报考科目)=3
是这样写的吗?

你的提问不全面,我也姑且不全面的回答你好了。

假定你的表名为“报名表”,字段分别为“姓名”、“准考证”、“报考科目”

再假定报考科目中所有报考科目代码直接连接不添加分割符号

比如报考1、2、3,则报考科目字段内容为“123”

那么查询所有报考课程“1”的学生:

select * from 报名表 where 报考科目 like '%1%'

查询所有报考课程“1”、“2”的学生:

select * from 报名表 where 报考科目 like '%1%' and 报考科目 like '%2%'

查询所有报考课程三门以上的学生:

select * from 报名表 where len(报考科目)>3

查报考过4门的学生:

select * from 报名表 where len(报考科目)=4

select count(*) where 姓名='张三' and 科目代号='1'

select 科目代码,count(姓名)
from 报名表
group by 科目代码

select 科目代码,count(姓名) from 报名表 where 姓名='张三' and 科目代号='1' group by 科目代码

楼上的兄弟报考科目号是不是一位数呢,......
这个语句不是很EASY吗?
楼主的分给不给我?
不给我也没关系,看你给谁噢
Select * From 报名表 where (Select Count(*) from group by 姓名)=N
N为你想要查的报名门数了
查一门就1
依此类推
要是你想查报名几门以上的话,就把=N改成>=N至于如何查询自己看着办吧

我同意楼上的看法,因为你并没有指定表结构 ,所以你得到的答案也是各有道理的,但却很难去适应你的应用。
那么我谨给你提出一种建议,是目前符合3范式模型的结构,请您参考:
一、首先建表:
1.学生表,如: create table T_Student(ID int,Name varchar(20).....)
2.课程表,如: create table T_Find(ID int,Name varchar(20),FindCode char(30).....)
3.选课表,如: create table T_Choose(ID int,StudentName varchar(20),StudentID int,FindID int,.....)
这样你便很方便的在程序界面控制各种表的数据,然后你需要反馈数据时只用查找表T_Choose即可:
如您的要求,查出选课在3科以上的学生:
select B.* from (Select StudentID from T_Choose group By StudentID having count(StudentID)>=3) A
left join T_Student B on A.StudentID=B.ID