表A
老师  学生  班级类型张老师 小吴 大班
张老师 小李 大班
王老师 小吴 小班
王老师 小李 小班
张老师 小陈 小班
王老师 小张 大班问题:
一个老师可能同时教大班和小班,求教大班人数比小班人数多的老师?

解决方案 »

  1.   

    select B.老师
    from 
    (select 老师,班级类型,人数=count(*)
    from tb where 班级类型='小班' group by 老师,班级类型)A
    ,
    (select 老师,班级类型,人数=count(*)
    from tb where 班级类型='大班' group by 老师,班级类型)B
    where B.人数>A.人数
      

  2.   

    DECLARE @a TABLE(ls varchar(20),xs varchar(20), bj varchar(20))INSERT @a SELECT '张老师', '小吴', '大班' 
    union all select '张老师' ,'小李' ,'大班' 
    union all select '王老师' ,'小吴' ,'小班' 
    union all select '王老师' ,'小李' ,'小班' 
    union all select '张老师' ,'小陈' ,'小班' 
    union all select '王老师' ,'小张' ,'大班' SELECT ls   from @a group by ls   
    HAVING sum(CASE WHEN bj='大班' then 1 else 0 end) >sum(CASE WHEN bj='小班' then 1 else 0 end)--result
    /*ls                   
    -------------------- 
    张老师(所影响的行数为 1 行)*/
      

  3.   

    SELECT ls   from @a group by ls   
    HAVING sum(CASE WHEN bj='大班' then 1 else 0 end) >sum(CASE WHEN bj='小班' then 1 else 0 end)
      

  4.   


    select 老师 from
    (
    select 老师, sum(case when 班级类型='小班' then 1 else 0 end) as 小班,
     sum(case when 班级类型='大班' then 1 else 0 end) as 大班
    from ta
    group by 老师
    ) a
    where 大班>小班
      

  5.   

    DECLARE @a TABLE(老师 varchar(20),学生 varchar(20), 班级类型 varchar(20))INSERT @a SELECT '张老师', '小吴', '大班' 
    union all select '张老师' ,'小李' ,'大班' 
    union all select '王老师' ,'小吴' ,'小班' 
    union all select '王老师' ,'小李' ,'小班' 
    union all select '张老师' ,'小陈' ,'小班' 
    union all select '王老师' ,'小张' ,'大班' 
    select 老师 from
    (
    select 老师, sum(case when 班级类型='小班' then 1 else 0 end) as 小班,
     sum(case when 班级类型='大班' then 1 else 0 end) as 大班
    from @a
    group by 老师
    ) a
    where 大班>小班
    /*
    老师
    --------------------
    张老师
    */