关于分条件统计的问题,不知这count(*)如何使用,请指教!
部门   姓名 招聘日期     转正日期
人事部 张一 2008/01/04 2008/05/01
人事部 张二 2008/01/05 2008/07/01
信息部 张三 2008/01/03 NULL
信息部 张四 2008/05/03 2008/7/30
要求统计截止到某天(2008/08/01)的招聘人数及转正人数,分部门统计:
统计结果:
部门   招聘人数 转正人数
人事部 2        2
信息部 2        1
合计   4        3请帮忙给出sql语句,谢谢!

解决方案 »

  1.   

    select 部门 , 
    sum(case when 招聘日期 >= '2008-08-01' then 1 else 0 end) '招聘人数',
    sum(case when 转正日期 >= '2008-08-01' then 1 else 0 end) '转正人数'
    from tb group by 部门
    union all
    select '合计' , 招聘人数 = (select count(*) from tb where 招聘日期 >= '2008-08-01'),
    转正人数 = (select count(*) from tb where 转正日期 >= '2008-08-01')
      

  2.   

    use tempdb
    go
    --> --> (Roy)生成測試數據
     
    set nocount on;
    if not object_id('Tempdb..#') is null
    drop table #
    Go
    Create table #([部门] nvarchar(3),[姓名] nvarchar(2),[招聘日期] Datetime,[转正日期] Datetime)
    Insert #
    select N'人事部',N'张一','2008/01/04','2008/05/01' union all
    select N'人事部',N'张二','2008/01/05','2008/07/01' union all
    select N'信息部',N'张三','2008/01/03',null union all
    select N'信息部',N'张四','2008/05/03','2008/7/30'
    Go
    declare @date datetime
    set @Date='2008/08/01'
    Select 
    [部门]=isnull([部门],'合计'),
    [招聘人数]=count(*),
    [转正人数]=sum(case when [转正日期]<=@Date then 1 else 0 end)
    from 
    #
    group by [部门] with rollup 
    部门   招聘人数        转正人数
    ---- ----------- -----------
    人事部  2           2
    信息部  2           1
    合计   4           3
      

  3.   

    select a.部门,a.招聘人数,b.转正人数 from(
    select 部门,count(*) as 招聘人数 from tb where 招聘日期<'2008-08-01' group by 部门
    )a inner join (
    select 部门,count(*) as 转正人数 from tb where 转正日期<'2008-08-01' group by 部门
    )b on a.部门=b.部门
      

  4.   

    --上面理解错了.这个对了.
    create table tb(部门 varchar(10) ,姓名 varchar(10),招聘日期 datetime, 转正日期 datetime)
    insert into tb values('人事部', '张一', '2008/01/04', '2008/05/01') 
    insert into tb values('人事部', '张二', '2008/01/05', '2008/07/01') 
    insert into tb values('信息部', '张三', '2008/01/03', NULL) 
    insert into tb values('信息部', '张四', '2008/05/03', '2008/7/30')
    goselect isnull(部门 , '合计') 部门 , 
    count(*) '招聘人数',
    count(转正日期) '转正人数'
    from tb group by 部门 with rollupdrop table tb/*
    部门         招聘人数        转正人数        
    ---------- ----------- ----------- 
    人事部        2           2
    信息部        2           1
    合计         4           3(所影响的行数为 3 行)
    */
      

  5.   


    if exists(select * from sysobjects where name ='tb' and xtype ='U')
    drop table tbcreate table tb(dpt varchar(100),emp varchar(100),time1 varchar(20),time2 varchar(20))
    insert tb 
    select N'人事部',N'张一','2008/01/04','2008/05/01'
     union all
    select N'人事部',N'张二','2008/01/05','2008/07/01' 
     union all
     select N'信息部',N'张三','2008/01/03',NULL 
     union all
     select N'信息部',N'张四','2008/05/03','2008/7/30'--goselect dpt,招聘人数=count(time1),转正人数=count(time2) from tb group by dpt
      

  6.   

    if object_id('tb') is not null
       drop table tb
    go
    create table tb(部门 varchar(10),姓名 varchar(10),招聘日期 varchar(10),转正日期 datetime)
    go
    insert into tb
    select '人事部','张一','2008/01/04','2008/05/01' union all
    select '人事部','张二','2008/01/05','2008/07/01' union all
    select '信息部','张三','2008/01/03',NULL union all
    select '信息部','张四','2008/05/03','2008/7/30'select * from tbselect 部门,招聘人数=count(*),转正人数=sum(case when 转正日期 is null then 0 else 1 end) from tb where 转正日期<'2008/08/01' group by 部门
    union all
    select '合计',count(*),转正人数=sum(case when 转正日期 is null then 0 else 1 end) from tb