SQL 员工离职人数统计

si12si12 2015-05-27 10:58:47
 CREATE TABLE EmpDismissType
(
ID INT PRIMARY KEY,
strType VARCHAR(40) NOT NULL
)
go
insert into EmpDismissType(ID,strType)
select 1,'试用期离职' union
select 2,'合同期离职' union
select 3,'开除'
go

CREATE TABLE EmpDismiss
(
strEmployeeCode VARCHAR(10) PRIMARY KEY,--员工工号
strEmployeeName VARCHAR(40) NOT NULL,--姓名
strDepartment VARCHAR(20) NOT NULL,--部门
strType VARCHAR(40) NOT NULL,--离职类别
iDay INT NOT NULL --在职天数
)
go
insert into EmpDismiss(strEmployeeCode,strEmployeeName,strDepartment,strType,iDay)
select '001','张三','信息中心','试用期离职',1 union
select '002','李四','信息中心','试用期离职',3 union
select '003','王五','信息中心','试用期离职',35 union
select '004','唯一','信息中心','合同期离职',456 UNION
select '005','小红','行政部','合同期离职',2 UNION
select '006','小小','行政部','开除',222
GO

按部门和离职类别统计员工离职人数,离职类别增加“(三天内)离职”统计,3天后的分类统计,3天内全部放在第一栏
查询想得到的结果如图
...全文
300 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
si12si12 2015-05-30
  • 打赏
  • 举报
回复
楼1 的写法 我比较易懂些 楼2 用到行转列 总之 非常感谢两位了
zhll2046 2015-05-28
  • 打赏
  • 举报
回复

;WITH Cte AS
(
SELECT strDepartment,strType,1 num FROM EmpDismiss
UNION ALL
SELECT strDepartment,N'三天内离职',1 num FROM EmpDismiss 
WHERE iDay<4
)
SELECT strDepartment, ISNULL([三天内离职],0) [三天内离职],ISNULL([试用期离职],0) [试用期离职],
ISNULL([合同期离职],0) [合同期离职],ISNULL([开除],0) [开除] FROM Cte
PIVOT
(
SUM(num) FOR strType IN ([三天内离职],[试用期离职],[合同期离职],[开除])
)PVT
还在加载中灬 2015-05-27
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT strDepartment,SUM(CASE WHEN iDay<=3 THEN 1 ELSE 0 END)AS[(三天内)离职]'
SELECT @SQL=@SQL+',SUM(CASE WHEN iDay>3 AND strType='''+strType+''' THEN 1 ELSE 0 END)['+strType+']'
FROM EmpDismissType GROUP BY strType,ID ORDER BY ID
SET @SQL=@SQL+'FROM EmpDismiss GROUP BY strDepartment'
--PRINT @SQL
EXEC(@SQL)
--静态
SELECT strDepartment
	,SUM(CASE WHEN iDay<=3 THEN 1 ELSE 0 END)AS[(三天内)离职]
	,SUM(CASE WHEN iDay>3 AND strType='试用期离职' THEN 1 ELSE 0 END)[试用期离职]
	,SUM(CASE WHEN iDay>3 AND strType='合同期离职' THEN 1 ELSE 0 END)[合同期离职]
	,SUM(CASE WHEN iDay>3 AND strType='开除' THEN 1 ELSE 0 END)[开除]
FROM EmpDismiss
GROUP BY strDepartment

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧