如:
    学号       姓名          系别          选课
    002001     张三          电子工程      JAVA
    002100     李四          物理          ASP
    002001     张三          化学          网络
    002051     小名          园林          数据库
    002021     黄小小        经济          管理学
    002051     小名          园林          素描
    ......
我们一看知道里面有重复的是学号002001和002051.现在的问题是我想在这个表中查询出有几个学生(如:002001只能算一个学生)并将他的学号,姓名,系别列出.不知道怎么能实现.
最后应该是:
    学号       姓名          系别          
    002001     张三          电子工程      
    002100     李四          物理          
    002051     小名          园林          
    002021     黄小小        经济          
怎么做呢..高手帮忙下..谢谢
    

解决方案 »

  1.   

    select 学号,姓名,系别  ftom tablename group by 学号
      

  2.   

    如果学号是确定唯一学生的话。
    select  学号,姓名,系别 from  tablename group by 学号
      

  3.   

    或者
    select  distinct 学号,姓名,系别 from  tablename
      

  4.   

    楼主的表中一个学号有多个系别,明显不可能实现    学号       姓名          系别          选课
        002001     张三          电子工程      JAVA
        002100     李四          物理          ASP
        002001     张三          化学          网络这张三是一次读的两个专业啊 ?
      

  5.   

    不好意思.张三写错了..补充下.学号唯一
    是:
        学号       姓名          系别          选课
        002001     张三          电子工程      JAVA
        002100     李四          物理          ASP
        002001     张三          电子工程      网络
        002051     小名          园林          数据库
        002021     黄小小        经济          管理学
        002051     小名          园林          素描
      

  6.   

    能不能直接判断有多条重复时只要第一条.如张三我只要选课为JAVA的张三信息.小名我只要选课为数据库的小名信息.
      

  7.   

    select * from tablename a
    where not exists (select 1 from tablename where 学号=a.学号 and 选课>a.选课 )
      

  8.   

    如:
        学号       姓名          系别          选课select 学号,max(姓名)姓名,max(系别) 系别 
    from student
    group by 学号
      

  9.   

    create table a(学号 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 min(学号) as 学号,min(姓名) as 姓名,min(系别)as 系别 from a group by 学号
    -----------------------------------
    -----------------------------------
    结果:
    002001 张三 电子工程
    002021 黄小小 经济
    002051 小名 园林
    002100 李四 物理
      

  10.   

    select unique(学号) from tablename
      

  11.   

    呵呵,楼上的代码有一点无法实现,就是楼主要求:
    "能不能直接判断有多条重复时只要第一条.如张三我只要选课为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 行)
      

  12.   

    注,我的代码中,myid是一个自增列,决定用户的录入顺序,没有这个顺序字段,无法对选课实现重复时提取第一条的要求,不知能否满足楼主的要求?
      

  13.   

    表结构有无主键?表设计就有物!alter table #a add  id numeric(28, 0) IDENTITY (1, 1) NOT NULL ---添加一个字段select * from #a a where a.id=(select top 1 id from #a where a. 学号= 学号)
      

  14.   

    最简单的这样就可以了!select  distinct 学号,姓名,系别 from  tablename
      

  15.   

    select distinct 学号,姓名,系别 from tablename
    只为了求人数的话可以
    select count(distintc 学号) from tablename
      

  16.   

    To hui_hui_2007(平安是福) 
    如果LZ的数据不是很少,如10000条,你也这样INSERT?
      

  17.   

    如果按照楼主的意思 只要select distinct 学号,姓名,系别 from  a;
    如果要加上相应的课程select 学号,姓名,max(系别),max(选课) from a group by 姓名,学号
      

  18.   

    To hui_hui_2007(平安是福) 
    如果LZ的数据不是很少,如10000条,你也这样INSERT?
    ----------------
    回复:
    我是举例子,就要放几条记录,并不是用这种方法添加记录,记录的添加是用客户端程序实现的,哪有这个加的.还有:msx(选课)的方法是不行的,因为楼主要先第一次出现的选课,如果用max()函数,就是按名称的排序顺序选了,带有随机性.