学生选课表中存在这样一些数据:
用户名        课程ID
liangw        10001a
liangw        10002a
liangw        10003a
liangw        10004a
liangw        10005a
liangw        10006a
...
liangw1       10001a
liangw1       10002a
liangw1       10003a
liangw1       10004a
liangw1       10005a
...要求 -- (当预约门数限制如:3门)那么我要删除一些超出3门限制的课程要怎么删除啊。(如果使用游标的话我知道怎么写,可我不想用,所以不知道有什么方法可以办到吗)
希望的结果为:
liangw        10001a
liangw        10002a
liangw        10003a
liangw1       10001a
liangw1       10002a
liangw1       10003a

解决方案 »

  1.   

    select * from table t   
    where (select count(*) from table where 用户名 = t.用户名 and 课程ID > t.课程ID) <3
      

  2.   

    create table #test (a nvarchar(20),b nvarchar(20))insert into #test 
    select 'liangw',        '10001a' union all
    select 'liangw',        '10002a' union all
    select 'liangw',        '10003a' union all
    select 'liangw',        '10004a' union all
    select 'liangw',        '10005a' union all
    select 'liangw',        '10006a' union all
    select 'liangw1',        '10001a' union all
    select 'liangw1',        '10002a' union all
    select 'liangw1',        '10003a' union all
    select 'liangw1',        '10004a' union all
    select 'liangw1',        '10005a' 
    select * from #test t where 
    (select count(*) from #test where t.a=a and t.b>b)<3--------------------------(所影响的行数为 11 行)a                    b                    
    -------------------- -------------------- 
    liangw               10001a
    liangw               10002a
    liangw               10003a
    liangw1              10001a
    liangw1              10002a
    liangw1              10003a(所影响的行数为 6 行)