select Mark_Range='0<= M <60',
        Numbers=count(*)
from @t
where  Mark>=0 and Mark<60
union all
select Mark_Range='60<=M <80',
        Numbers=count(*)
from @t
where  Mark>=60 and Mark<80
union all
select Mark_Range='M>=80',
        Numbers=count(*)
from @t
where   Mark>=80

解决方案 »

  1.   

    SELECT '0<= M <60 ' Mark_Range,COUNT(1) Numbers WHERE MarK>=0 AND Mark<60 
    UNION
    SELECT '60<= M <80 ' Mark_Range,COUNT(1) Numbers WHERE MarK>=60 AND Mark<80 
    UNION
    SELECT 'M >=80 ' Mark_Range,COUNT(1) Numbers WHERE Mark>80
      

  2.   

    --测试环境
    declare @t table(StudentID varchar(10),Mark int)
    insert into @t select '2001',80
    union all select '2002',65
    union all select '2003',92
    union all select '2004',78
    union all select '2005',56
    --查询
    select Mark_Range='0<= M <60',
            Numbers=count(*)
    from @t
    where  Mark>=0 and Mark<60
    union all
    select Mark_Range='60<=M <80',
            Numbers=count(*)
    from @t
    where  Mark>=60 and Mark<80
    union all
    select Mark_Range='M>=80',
            Numbers=count(*)
    from @t
    where   Mark>=80
    --结果
    Mark_Range Numbers     
    ---------- ----------- 
    0<= M <60  1
    60<=M <80  2
    M>=80      2(所影响的行数为 3 行)
      

  3.   

    SELECT '0<= M <60 ' Mark_Range,COUNT(1) Numbers FROM Course WHERE MarK>=0 AND Mark<60 
    UNION
    SELECT '60<= M <80 ' Mark_Range,COUNT(1) Numbers FROM Course WHERE MarK>=60 AND Mark<80 
    UNION
    SELECT 'M >=80 ' Mark_Range,COUNT(1) Numbers FROM Course WHERE Mark>80
      

  4.   

    select case when Mark>=0  and Mark<60 then '0<= M <60' 
                when Mark>=60 and Mark<80 then '60<=M <80' 
                when Mark>=80             then 'M>=80' else '' end as Mark_Range,
           count(*) as Numbers from Course 
           group by 
           case when Mark>=0  and Mark<60 then '0<= M <60' 
                when Mark>=60 and Mark<80 then '60<=M <80' 
                when Mark>=80             then 'M>=80' else '' end
      

  5.   

    感谢各位的回复
       xueguang(xg)的答案跟zlp321002(飘过)的答案差不多,都是是正确的,谢谢!
       salonstar(Tommy)用的方法我想是最好的,之前我也试着这样做过,没有做出来,我想用这种方法肯定实现,salonstar(Tommy)写的答案我试用还是有错误,不知道为什么?
      

  6.   

    salonstar(Tommy) 的方法是正确的啊。
      

  7.   

    试过salonstar(Tommy) 是正确的!
      

  8.   

    SELECT '0<= M <60 ' Mark_Range,COUNT(1) Numbers FROM Course WHERE MarK>=0 AND Mark<60 
    UNION
    SELECT '60<= M <80 ' Mark_Range,COUNT(1) Numbers FROM Course WHERE MarK>=60 AND Mark<80 
    UNION
    SELECT 'M >=80 ' Mark_Range,COUNT(1) Numbers FROM Course WHERE Mark>80
      

  9.   

    异曲同工:
    select _range,count(*) as mumber from 
    (select case when Mark>=0  and Mark<60 then '0<= M <60' 
                when Mark>=60 and Mark<80 then '60<=M <80' 
                when Mark>=80 then 'M>=80' else '' end  as Mark_Range,
            from Course )as a 
    group by _range