如:
学号 姓名 系别 选课
002001 张三 电子工程 JAVA
002100 李四 物理 ASP
002001 张三 化学 网络
002051 小名 园林 数据库
002021 黄小小 经济 管理学
002051 小名 园林 素描
......
我们一看知道里面有重复的是学号002001和002051.现在的问题是我想在这个表中查询出有几个学生(如:002001只能算一个学生)并将他的学号,姓名,系别列出.不知道怎么能实现.
最后应该是:
学号 姓名 系别
002001 张三 电子工程
002100 李四 物理
002051 小名 园林
002021 黄小小 经济
怎么做呢..高手帮忙下..谢谢
学号 姓名 系别 选课
002001 张三 电子工程 JAVA
002100 李四 物理 ASP
002001 张三 化学 网络
002051 小名 园林 数据库
002021 黄小小 经济 管理学
002051 小名 园林 素描
......
我们一看知道里面有重复的是学号002001和002051.现在的问题是我想在这个表中查询出有几个学生(如:002001只能算一个学生)并将他的学号,姓名,系别列出.不知道怎么能实现.
最后应该是:
学号 姓名 系别
002001 张三 电子工程
002100 李四 物理
002051 小名 园林
002021 黄小小 经济
怎么做呢..高手帮忙下..谢谢
解决方案 »
- if object_id ('t3')is not null drop table [t3]
- 这个问题怎么解决啊,高手帮忙啊!
- 突然想到一个很实际的问题!没有思绪...
- SQL根据字符串查询
- 将任一时间如2005-4-24 5:53:59 的datetime 改成2005-4-24 00:00:00 和2005-4-24 23:59:59 两个Datetime
- sql2000server占CPU的99%?????
- 请问,我想对一个字段里的不同值进行计数,怎么写?
- 数据库无法使用:Failed to reserve contiguous memory of Size= 65536
- 求助 可人民币感谢 修复损坏的SQL数据库文件
- 是不是不能在动态连接库中用ADO操纵数据库?
- 可以先安裝SQL2005,再安裝SQL2000嗎?
- 如何捕获删除记录出错的 返回值
select 学号,姓名,系别 from tablename group by 学号
select distinct 学号,姓名,系别 from tablename
002001 张三 电子工程 JAVA
002100 李四 物理 ASP
002001 张三 化学 网络这张三是一次读的两个专业啊 ?
是:
学号 姓名 系别 选课
002001 张三 电子工程 JAVA
002100 李四 物理 ASP
002001 张三 电子工程 网络
002051 小名 园林 数据库
002021 黄小小 经济 管理学
002051 小名 园林 素描
where not exists (select 1 from tablename where 学号=a.学号 and 选课>a.选课 )
学号 姓名 系别 选课select 学号,max(姓名)姓名,max(系别) 系别
from student
group by 学号
insert into a
select 002001,'张三','电子工程','JAVA' union all
select 002100,'李四','物理','ASP' union all
select 002001,'张三','化学','网络' union all
select 002051,'小名','园林','数据库' union all
select 002021,'黄小小','经济','管理学' union all
select 002051,'小名','园林','素描'-------------------------------
-------------------------------
select min(学号) as 学号,min(姓名) as 姓名,min(系别)as 系别 from a group by 学号
-----------------------------------
-----------------------------------
结果:
002001 张三 电子工程
002021 黄小小 经济
002051 小名 园林
002100 李四 物理
"能不能直接判断有多条重复时只要第一条.如张三我只要选课为JAVA的张三信息.小名我只要选课为数据库的小名信息."
要实现楼主的要求,必须增加一列才行,用这个列来决定录入顺序.从而实现"有多条重复时只要第一条"
代码如下:
create table #a(myid int identity(1,1),学号 int,姓名 varchar(10),系别 varchar(50),选课 varchar(50))
insert into #a
select 002001,'张三','电子工程','JAVA' union all
select 002100,'李四','物理','ASP' union all
select 002001,'张三','化学','网络' union all
select 002051,'小名','园林','素描' union all --数据库
select 002021,'黄小小','经济','管理学' union all
select 002051,'小名','园林','数据库'select * from #aselect a.myid,a.学号,a.姓名,a.系别,a.选课
from #a a inner join (select min(myid) as myid from #a group by 学号) b on (a.myid=b.myid)drop table #a--结果如下:(所影响的行数为 6 行)myid,学号,姓名,系别,选课
1,2001,张三,电子工程,JAVA
2,2100,李四,物理,ASP
3,2001,张三,化学,网络
4,2051,小名,园林,素描
5,2021,黄小小,经济,管理学
6,2051,小名,园林,数据库(所影响的行数为 6 行)myid,学号,姓名,系别,选课
1,2001,张三,电子工程,JAVA
2,2100,李四,物理,ASP
4,2051,小名,园林,素描
5,2021,黄小小,经济,管理学(所影响的行数为 4 行)
只为了求人数的话可以
select count(distintc 学号) from tablename
如果LZ的数据不是很少,如10000条,你也这样INSERT?
如果要加上相应的课程select 学号,姓名,max(系别),max(选课) from a group by 姓名,学号
如果LZ的数据不是很少,如10000条,你也这样INSERT?
----------------
回复:
我是举例子,就要放几条记录,并不是用这种方法添加记录,记录的添加是用客户端程序实现的,哪有这个加的.还有:msx(选课)的方法是不行的,因为楼主要先第一次出现的选课,如果用max()函数,就是按名称的排序顺序选了,带有随机性.