表的名字viviantest , 是同学的学号和分数 ,现在想列出, 选择两科以上同学的学号和分数怎么写呢 ? 
number   score
1         50   
1         60   
1         70
2         80 
2         65
3         90
3         95
3         85 
3         75  
我想用sql 语句查询 ,  选课在2门以上的所有的信息   我用这个 sal 语句  : 
select *  from viviantest group by number having count(number)> 2   结果是  1   50  
        3    90  大家帮忙看看怎么写 sql  ? 

解决方案 »

  1.   

    select * from viviantest where number in(select number from viviantest group by number having count(*)>=2)
      

  2.   

    select * from tb where number in(select number from tb group by number having count(1)>2)
      

  3.   

    select * from viviantest 
    where numuber in(
    select numuber from viviantest group by number having count(number)> 2   
    )
      

  4.   


    select * from viviantest  having count(number)> 2
      

  5.   

    select * from tb t where exists(select 1 from tb where number=t.number and score<>t.score)
      

  6.   

    我认为你写的也对 , 我用的是my_sql的数据库 , 它把所有的数据都列出来了 , 为什么呢 ?
      

  7.   


    select * from tb t where not exists(select 1 from tb where number=t.number and score<t.score)
      

  8.   

    if object_id('[viviantest]') is not null drop table [viviantest]
    go
    create table [viviantest] (number int,score int)
    insert into [viviantest]
    select 1,50 union all
    select 1,60 union all
    select 1,70 union all
    select 2,80 union all
    select 2,65 union all
    select 3,90 union all
    select 3,95 union all
    select 3,85 union all
    select 3,75select * from [viviantest]--2K5以上版本适用
    SELECT number,score
    FROM (
    SELECT  A.*,NO = ROW_NUMBER() OVER (PARTITION BY number ORDER BY GETDATE())
    FROM    [viviantest] AS A
    WHERE   EXISTS ( SELECT number
                     FROM   [viviantest]
                     WHERE  number = A.number
                     GROUP BY number
                     HAVING COUNT(number) > 2 ))T
    WHERE no = 1/*
    number score
    1 50
    3 90*/
                     
                   
      

  9.   

    SELECT number,score
    FROM (
    SELECT  A.*
    FROM    viviantest A
    WHERE   EXISTS ( SELECT number
                     FROM   viviantest
                     WHERE  number = A.number
                     GROUP BY number
                     HAVING COUNT(number) > 2 )) T
    这么写对了  ! 请教8楼上 为什么要用  WHERE  number = A.number    这个语句    ? 谢谢 !
      

  10.   

    select * from tb t where not exists(select 1 from tb where number=t.number and score<t.score)
    and exists(select 1 from tb where number=t.number and score<>t.score)只顯示重新且只顯示一條記錄