表1中字段1相同的记录数〈字段2,则选出这些字段1相同的记录。

   姓名      人数
   
   李明      3
   李明      3
   王亮      2
   王亮      2 
   谢风      1
因为姓名为李明的记录数为2〈(人数)3,所以选出来。
请问这条SELECT语句怎么写?是不是根本写不出来?写不出来我真麻烦了。

解决方案 »

  1.   

    select 姓名 from table
    group by 姓名
    having count(*) >1 and count(*) < max(人数)
      

  2.   

    select a.姓名,b.人数 from 
    (select 姓名,count(姓名) 人数 from Table group by 姓名) a,
    (select 姓名,人数 from Table) b
    where a.姓名=b.姓名 and a.人数<b.人数;如果姓名不要重复,那就这样
    select distinct a.姓名,b.人数 from 
    (select 姓名,count(姓名) 人数 from Table group by 姓名) a,
    (select 姓名,人数 from Table) b
    where a.姓名=b.姓名 and a.人数<b.人数;
      

  3.   

    补充:这样更好
    select 姓名,人数 from Table group by 姓名,人数 having count(姓名)<人数
      

  4.   

    我刚才的SQL在ORACLE里调试通过,别的数据库也应该可以。
      

  5.   

    试试
    select ta.* from yourtable ta
     where (select count(*) from yourtable where 姓名 = ta.姓名) < ta.人数 
      

  6.   

    to ATCG(ATCG) 
    这样更好
    select 姓名,Max(人数) as 人数 from Table group by 姓名 having count(姓名)<人数
      

  7.   

    TO: qybao(阿宝) 
    楼主的情况是同名的人。人数也一样的,所以你这样的写法和我的没有区别。
    当让,若同名的人,人数不同,就是你的好一些。
      

  8.   

    SELECT ID,COUNT(ID) GROUP BY ID
      

  9.   

    人数是文本型的,都带‘/’了。当然不是INT。
      

  10.   

    是什么数据库啊?ORACLE,SYBASE,SQL SERVER,MYSQL?
      

  11.   

    还有,不知道是 < 1/3呢  
              还是 < 3
      

  12.   

    1/3中1是位次,3是总人数
    因此需要<3.
    但1/3是1个字段的值。从1/3取出3很容易,但在SQL语句中就不知该怎么办了。
      

  13.   

    我问了你半天,是什么数据库,你还没有回答,唉!
    如果是ORACLE,这样就可以了。
    select 姓名,位次 from aa group by 姓名,位次 having count(姓名)<to_number(substr(位次,instr(位次,'/')+1,lengthb(位次)-instr(位次,'/')))
      

  14.   

    如果你的  / 的左右两边的数字是固定长度的,即,都是个位数获十位数,
    或一边个位,一边十位,那么SQL语句还可以更简单
      

  15.   

    OK。我再说详细点。
    我用的数据库是ACCESS2000。
    姓名      位次
       
    李明      1/3
    李明      2/3
    王亮      1/2
    王亮      2/2 
    谢风      1/1
    王海      2/2
    因为李明还有一个3/3为登记所以选出李明,王海还有1/2未登记也选出来。
    adoquery执行完SELECT语句出现如下效果:
    adoquery.fiedvalues['姓名']=李明
    执行adoquery.moveby[1];后,
    adoquery.fieldvalues['姓名']=王海      
    如下是我根据大家的意见写出了一个,但还是不行。
    select distinct 姓名 from group by 姓名 having count(姓名)<StrToInt(RightStr(位次,Length(位次)-Pos('/',位次))) order by 姓名
      

  16.   

    select distinct 姓名 from group by 姓名 having count(姓名)<mid(位次,inStr(位次,'/')+1)
      

  17.   

    改正一下:
    select distinct 姓名 from 表名 group by 姓名 having count(姓名)<mid(位次,inStr(位次,'/')+1)
      

  18.   

    上面这位老兄的方法不行啊。
    WHO CAN HELP ME?
      

  19.   

    You can help yourself, I had given you the method, but I don't
    know Access, so you can look up the relevant SQL grammar of Access.
    I think it will be very helpful to you.
      

  20.   

    这句要是不对,我一头磕死
    select 姓名 from 表
    group by 姓名 ,人数
    having count(*)<人数
      

  21.   

    上面的语句在表如下的情况下
    a 3
    a 3
    b 2
    c 1
    将得到
    a
    b