表是这样的
    进入时间            性别  
 2006-12-5 12:12:00      男  
 2006-12-3 10:12:00      女  
 2006-12-2  9:12:00      女  
 2006-11-15 24:12:00     男  
 2006-11-5 12:12:00      女  
 2006-10-5 12:12:00      男  结果想这样
  月份      男性次数    女性次数   总次数
2006年12月     1            2        3
2006年11月     1            1        2
2006年10月     1            0        1
 各位大侠帮帮忙

解决方案 »

  1.   

    select convert (varchar(6),进入时间,112) as 月份
    ,isnull (sum(case when 性别='男' then 1 else 0 end),0) as 男性次数
    ,isnull (sum(case when 性别='女' then 1 else 0 end),0) as 女性次数
    ,count(性别) as 总次数
    from table 
    group by convert (varchar(6),进入时间,112)
      

  2.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb
    (
    进入时间 datetime,
    性别 char(2)
    )insert into tb(进入时间,性别) values('2006-12-5 12:12:00' ,     '男')
    insert into tb(进入时间,性别) values('2006-12-3 10:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-12-2  9:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-11-15 00:12:00',     '男')
    insert into tb(进入时间,性别) values('2006-11-5 12:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-10-5 12:12:00' ,     '男')select convert(varchar(7),进入时间,120)  as 月份,
           sum(case when 性别 = '男' then 1 else 0 end) as 男性次数,
           sum(case when 性别 = '女' then 1 else 0 end) as 女性次数,
           count(*) as 总次数
    from tb
    group by convert(varchar(7),进入时间,120)drop table tb月份    男性次数    女性次数    总次数         
    ------- ----------- ----------- ----------- 
    2006-10 1           0           1
    2006-11 1           1           2
    2006-12 1           2           3(所影响的行数为 3 行)
      

  3.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb
    (
    进入时间 datetime,
    性别 char(2)
    )insert into tb(进入时间,性别) values('2006-12-5 12:12:00' ,     '男')
    insert into tb(进入时间,性别) values('2006-12-3 10:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-12-2  9:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-11-15 00:12:00',     '男')
    insert into tb(进入时间,性别) values('2006-11-5 12:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-10-5 12:12:00' ,     '男')select replace(月份 , '-' , '年') + '月' as 月份, 男性次数 , 女性次数 , 总次数 from
    (
    select convert(varchar(7),进入时间,120)  as 月份,
           sum(case when 性别 = '男' then 1 else 0 end) as 男性次数,
           sum(case when 性别 = '女' then 1 else 0 end) as 女性次数,
           count(*) as 总次数
    from tb
    group by convert(varchar(7),进入时间,120)
    ) t
    order by 月份 desc
    drop table tb月份       男性次数    女性次数    总次数         
    ---------- ----------- ----------- ----------- 
    2006年12月 1           2           3
    2006年11月 1           1           2
    2006年10月 1           0           1(所影响的行数为 3 行)
      

  4.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb
    (
    进入时间 datetime,
    性别 char(2)
    )insert into tb(进入时间,性别) values('2006-12-5 12:12:00' ,     '男')
    insert into tb(进入时间,性别) values('2006-12-3 10:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-12-2  9:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-11-15 00:12:00',     '男')
    insert into tb(进入时间,性别) values('2006-11-5 12:12:00' ,     '女')
    insert into tb(进入时间,性别) values('2006-10-5 12:12:00' ,     '男')select replace(convert(varchar(7),进入时间,120) , '-' , '年') + '月' as 月份,
           sum(case when 性别 = '男' then 1 else 0 end) as 男性次数,
           sum(case when 性别 = '女' then 1 else 0 end) as 女性次数,
           count(*) as 总次数
    from tb
    group by replace(convert(varchar(7),进入时间,120) , '-' , '年') + '月'
    order by 月份 descdrop table tb月份       男性次数    女性次数    总次数         
    ---------- ----------- ----------- ----------- 
    2006年12月 1           2           3
    2006年11月 1           1           2
    2006年10月 1           0           1(所影响的行数为 3 行)
      

  5.   

    create table ta 
    (
    进入时间 datetime ,
    性别 varchar(10)
    )insert into ta select  '2006-12-5 12:12:00',      '男'  
    union all select  '2006-12-3 10:12:00',      '女'  
    union all select  '2006-12-2  9:12:00',      '女'  
    union all select  '2006-11-15 23:12:00',     '男'  
    union all select  '2006-11-5 12:12:00',      '女'  
    union all select  '2006-10-5 12:12:00',      '男'
    select convert (varchar(4),进入时间,112)+'年'+ cast (month(进入时间) as varchar(6)) +'月' as 月份
    ,isnull (sum(case when 性别='男' then 1 else 0 end),0) as 男性次数
    ,isnull (sum(case when 性别='女' then 1 else 0 end),0) as 女性次数
    ,count(性别) as 总次数
    from ta 
    group by convert (varchar(4),进入时间,112)+'年'+ cast (month(进入时间) as varchar(6)) +'月'
    order by  convert (varchar(4),进入时间,112)+'年' +cast (month(进入时间) as varchar(6)) +'月' desc
    --结果
    月份             男性次数        女性次数        总次数         
    -------------- ----------- ----------- ----------- 
    2006年12月       1           2           3
    2006年11月       1           1           2
    2006年10月       1           0           1(所影响的行数为 3 行)
      

  6.   

    create table T(inTime datetime, Sex nchar(1))
    insert T select  '2006-12-5 12:12:00',      '男'  
    union all select  '2006-12-3 10:12:00',      '女'  
    union all select  '2006-12-2  9:12:00',      '女'  
    union all select  '2006-11-15 00:12:00',     '男'  
    union all select  '2006-11-5 12:12:00',      '女'  
    union all select  '2006-10-5 12:12:00',      '男'  select convert(char(7), inTime, 120),
    男性次数=sum(case when Sex='男' then 1 else 0 end),
    女性次数=sum(case when Sex='女' then 1 else 0 end),
    count(*)
    from T 
    group by convert(char(7), inTime, 120)
      

  7.   


    select convert(char(7), inTime, 120) as 月份,
    男性次数=sum(case when Sex='男' then 1 else 0 end),
    女性次数=sum(case when Sex='女' then 1 else 0 end),
    count(*)
    from T 
    group by convert(char(7), inTime, 120)--result月份      男性次数        女性次数                    
    ------- ----------- ----------- ----------- 
    2006-10 1           0           1
    2006-11 1           1           2
    2006-12 1           2           3(3 row(s) affected)
      

  8.   

    建议楼主解决了问题之后好好看看Group By的一般用法即可:)select convert(varchar(7),进入时间,120)  as 月份,
           sum(case when 性别 = '男' then 1 else 0 end) as 男性次数,
           sum(case when 性别 = '女' then 1 else 0 end) as 女性次数,
           count(*) as 总次数
    from #temptable
    group by convert(varchar(7),进入时间,120) 
    order by convert(varchar(7),进入时间,120) DESC