首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

冰天雪地,零上20度裸奔求语句

2013-01-11 
冰天雪地,零下20度裸奔求语句有一个这样的数据表年月人员编号 员工状态性别201101001在职男201101002在职

冰天雪地,零下20度裸奔求语句


有一个这样的数据表
年月人员编号 员工状态  性别
201101001在职男
201101002在职女
201101003在职男
201101004在职女
201101005离职男
201101006离职女
201102001在职男
201102002在职女
201102003在职男
201102004离职女
201102005离职男
201102006离职女
201103001在职男
201103002在职女
201103003离职男
201103004离职女
201103005离职男
201103006离职女

如何生成这样的统计结果呀?
年月     在职人数 离职人数 男员工人数  男员工比例女员工人数 女员工比例
2011年1月
2011年2月
2011年3月
2011年4月
2011年5月
2011年6月
2011年7月
2011年8月
2011年9月
2011年10月
2011年11月
2011年12月




[解决办法]
----------------------------
-- Author  :DBA_Huangzj
-- Date    :2013-01-08 14:28:41
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--Jun 17 2011 00:54:03 
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([年月] int,[人员编号] varchar(3),[员工状态] varchar(4),[性别] varchar(2))
insert [huang]
select 201101,'001','在职','男' union all
select 201101,'002','在职','女' union all
select 201101,'003','在职','男' union all
select 201101,'004','在职','女' union all
select 201101,'005','离职','男' union all
select 201101,'006','离职','女' union all
select 201102,'001','在职','男' union all
select 201102,'002','在职','女' union all
select 201102,'003','在职','男' union all
select 201102,'004','离职','女' union all
select 201102,'005','离职','男' union all
select 201102,'006','离职','女' union all
select 201103,'001','在职','男' union all
select 201103,'002','在职','女' union all
select 201103,'003','离职','男' union all
select 201103,'004','离职','女' union all
select 201103,'005','离职','男' union all
select 201103,'006','离职','女'
--------------开始查询-------------------------
select 年月,在职人数=SUM(CASE WHEN [员工状态]='在职' THEN 1 ELSE 0 END ), 离职人数=SUM(CASE WHEN [员工状态]='离职' THEN 1 ELSE 0 END ),
 男员工人数=SUM(CASE WHEN [性别]='男' THEN 1 ELSE 0 END ),  男员工比例= CONVERT(VARCHAR(10),SUM(CASE WHEN [性别]='男' THEN 1 ELSE 0 END )/100.0)+'%',   女员工人数=SUM(CASE WHEN [性别]='女' THEN 1 ELSE 0 END ), 女员工比例 =CONVERT(VARCHAR(10),SUM(CASE WHEN [性别]='女' THEN 1 ELSE 0 END )/100.0)+'%'
from [huang]
GROUP BY 年月
----------------结果----------------------------
/* 
年月          在职人数        离职人数        男员工人数       男员工比例       女员工人数       女员工比例


----------- ----------- ----------- ----------- ----------- ----------- -----------
201101      4           2           3           0.030000%   3           0.030000%
201102      3           3           3           0.030000%   3           0.030000%
201103      2           4           3           0.030000%   3           0.030000%

(3 行受影响)
*/


[解决办法]
select rtrim(年月/100)+'年'+rtrim(年月%100)+'月' 年月,
sum(case when 员工状态='在职' then 1 else 0 end)在职人数,
sum(case when 员工状态='离职' then 1 else 0 end)离职人数,
sum(case when 性别='男' then 1 else 0 end)男员工人数,
rtrim(cast(sum(case when 性别='男' then 1 else 0 end)*100.0/count(1) as int))+'%'男员工比例,
sum(case when 性别='女' then 1 else 0 end)女员工人数,
rtrim(cast(sum(case when 性别='女' then 1 else 0 end)*100.0/count(1) as int))+'%'女员工比例   from tb group by 年月

热点排行