有一个这样的数据表
年月 人员编号 员工状态  性别
201101 001 在职 男
201101 002 在职 女
201101 003 在职 男
201101 004 在职 女
201101 005 离职 男
201101 006 离职 女
201102 001 在职 男
201102 002 在职 女
201102 003 在职 男
201102 004 离职 女
201102 005 离职 男
201102 006 离职 女
201103 001 在职 男
201103 002 在职 女
201103 003 离职 男
201103 004 离职 女
201103 005 离职 男
201103 006 离职 女如何生成这样的统计结果呀?
年月      在职人数 离职人数 男员工人数  男员工比例 女员工人数 女员工比例
2011年1月
2011年2月
2011年3月
2011年4月
2011年5月
2011年6月
2011年7月
2011年8月
2011年9月
2011年10月
2011年11月
2011年12月

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- 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 行受影响)
    */
      

  2.   

    那个百分比你自己调吧.我不知道你要什么格式----------------------------------------------------------------
    -- 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 SUBSTRING(CONVERT(VARCHAR(6),年月),1,4)+'年'+SUBSTRING(CONVERT(VARCHAR(6),年月),5,2)+'月' 年月,在职人数=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 SUBSTRING(CONVERT(VARCHAR(6),年月),1,4)+'年'+SUBSTRING(CONVERT(VARCHAR(6),年月),5,2)+'月'
    ----------------结果----------------------------
    /* 
    年月             在职人数        离职人数        男员工人数       男员工比例       女员工人数       女员工比例
    -------------- ----------- ----------- ----------- ----------- ----------- -----------
    2011年01月       4           2           3           0.030000%   3           0.030000%
    2011年02月       3           3           3           0.030000%   3           0.030000%
    2011年03月       2           4           3           0.030000%   3           0.030000%(3 行受影响)
    */
      

  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 年月