关于分条件统计的问题,不知这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语句,谢谢!
部门 姓名 招聘日期 转正日期
人事部 张一 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语句,谢谢!
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')
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
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.部门
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 行)
*/
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
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