有这么个需求
有个student表
有3个字段
name   age      sex
张三 11 男
李四 12 女
王五 9 男
刘六 13 男
赵七 10 男
冯八 8 女
孙九 10 男
郑十 11 女
郭十一 15 女
蒋十二 7 男
我想得到这么个结果。年龄从最小的基数加5岁。5岁为一个年龄段,求出没个年龄段的男女数年龄段   男生数   女生数
7-12      5       2
12-17     1       2我分不多。我尽量给。先谢谢各位了

解决方案 »

  1.   

    select 年龄段,
      sum(case when sex = '男' then 1 else 0 end) [男生数],
      sum(case when sex = '男' then 1 else 0 end) [女生数]
    from
    (
    select case when age between 7 and 12 then '7-12' 
                when age between 13 and 17 then '12-17'
                else ''
           end 年龄段, sex
    from tb
    ) t
    group by 年龄段
      

  2.   

    --你自己把范围调整一下.
    create table student(name varchar(10), age int,     sex varchar(10))
    insert into student values('张三'  , 11 ,'男') 
    insert into student values('李四'  , 12 ,'女') 
    insert into student values('王五'  , 9  ,'男') 
    insert into student values('刘六'  , 13 ,'男') 
    insert into student values('赵七'  , 10 ,'男') 
    insert into student values('冯八'  , 8  ,'女') 
    insert into student values('孙九'  , 10 ,'男') 
    insert into student values('郑十'  , 11 ,'女') 
    insert into student values('郭十一', 15 ,'女') 
    insert into student values('蒋十二', 7  ,'男')
    goselect 年龄段,
      sum(case when sex = '男' then 1 else 0 end) [男生数],
      sum(case when sex = '女' then 1 else 0 end) [女生数]
    from
    (
    select case when age between 7 and 12 then '7-12' 
                when age between 13 and 17 then '12-17'
                else ''
           end 年龄段, sex
    from student 
    ) t
    group by 年龄段drop table student /*
    年龄段   男生数         女生数         
    ----- ----------- ----------- 
    12-17 1           1
    7-12  5           3(所影响的行数为 2 行)
    */
      

  3.   

    DECLARE @a TABLE(NAME VARCHAR(20),  age INT,     sex VARCHAR(20))
    INSERT @a SELECT '张三', 11 ,'男' 
    union all select '李四', 12 ,'女' 
    union all select '王五', 9 ,'男' 
    union all select '刘六', 13 ,'男' 
    union all select '赵七', 10 ,'男' 
    union all select '冯八', 8 ,'女' 
    union all select '孙九', 10 ,'男' 
    union all select '郑十', 11 ,'女' 
    union all select '郭十一', 15 ,'女' 
    union all select '蒋十二', 7 ,'男' SELECT 
       LTRIM(m+(age-7)/5*5)+'-'+LTRIM((m+(age-7)/5*5+5)) 年龄段,
       sum(CASE WHEN sex='男' then 1 else 0 END)男,
       SUM(CASE WHEN sex='女' then 1 else 0 END)女
    FROM
    (
       SELECT NAME,age,sex,m,(age-7)/5 s  FROM @a a,
       (SELECT MIN(age) m,(MAX(age)-Min(age))/5+1 x FROM @a ) b
    )aa
    GROUP BY LTRIM(m+(age-7)/5*5)+'-'+LTRIM((m+(age-7)/5*5+5))--result
    /*年龄段                       男           女           
    ------------------------- ----------- ----------- 
    12-17                     1           2
    7-12                      5           2(所影响的行数为 2 行)*/