+ -
当前位置:首页 → 问答吧 → 计算员工的离职后前的天数

计算员工的离职后前的天数

时间:2011-12-12

来源:互联网

SQL code


create table Employees(员工编号,进厂时间,状态)--状态0为离职,大于0在职
insert into  Employees('001','2010-12-2',0)
insert into  Employees('002','2011-12-12',1)
insert into  Employees('003','2011-10-12',3)
create table EmployeesQuit(员工编号,离职时间)
insert into  EmployeesQuit('001','2012-12-4')

--想要的结果
员工编号  天数
001        27
002        12

作者: chirea   发布时间: 2011-12-12

数据对吗?

作者: qianjin036a   发布时间: 2011-12-12

引用 1 楼 qianjin036a 的回复:
数据对吗?

对的.是查询12月份的时要的结果.

作者: chirea   发布时间: 2011-12-12

兄弟,"离职后前的天数",是离职后的天数,还是离职前的天数,还是离职后到当前日期的天数??

作者: qianjin036a   发布时间: 2011-12-12

引用 3 楼 qianjin036a 的回复:
兄弟,"离职后前的天数",是离职后的天数,还是离职前的天数,还是离职后到当前日期的天数??

001,4号离职,计算4号到月底的天数
002 12号入职,计算入职前的天数.

作者: chirea   发布时间: 2011-12-12

SQL code
create table Employees(员工编号 varchar(10),进厂时间 datetime,状态 int)--状态0为离职,大于0在职
insert into  Employees values('001','2010-12-2',0)
insert into  Employees values('002','2011-12-12',1)
insert into  Employees values('003','2011-10-12',3)
create table EmployeesQuit(员工编号 varchar(10),离职时间 datetime)
insert into  EmployeesQuit values('001','2012-12-4')
go
select 员工编号,datepart(d,进厂时间) 天数 from Employees where 状态=1
union all
select 员工编号,datediff(d,离职时间,convert(varchar(8),dateadd(m,1,离职时间),120)+'01')-1 from employeesquit
/*
员工编号       天数
---------- -----------
002        12
001        27

(2 行受影响)

*/
go
drop table Employees,employeesquit

作者: qianjin036a   发布时间: 2011-12-12

002 12
怎么得到的?

作者: fredrickhu   发布时间: 2011-12-12

引用 5 楼 qianjin036a 的回复:
SQL code
create table Employees(员工编号 varchar(10),进厂时间 datetime,状态 int)--状态0为离职,大于0在职
insert into Employees values('001','2010-12-2',0)
insert into Employees values('002','2011-12-12',1)
insert i……


要用一个select

作者: chirea   发布时间: 2011-12-12

引用 7 楼 chirea 的回复:

引用 5 楼 qianjin036a 的回复:
SQL code
create table Employees(员工编号 varchar(10),进厂时间 datetime,状态 int)--状态0为离职,大于0在职
insert into Employees values('001','2010-12-2',0)
insert into Employees values('002'……

你是两个表,用union all 就相当于一句.你尽可以把它当成一个 select 看待:
SQL code
select 员工编号,datepart(d,进厂时间) 天数 from Employees where 状态=1 union all select 员工编号,datediff(d,离职时间,convert(varchar(8),dateadd(m,1,离职时间),120)+'01')-1 from employeesquit

作者: qianjin036a   发布时间: 2011-12-12

你是两个表,用union all就相当于一句查询语句,你可以这样看:
SQL code
select 员工编号,datepart(d,进厂时间) 天数 from Employees where 状态=1 union all select 员工编号,datediff(d,离职时间,convert(varchar(8),dateadd(m,1,离职时间),120)+'01')-1 from employeesquit

作者: qianjin036a   发布时间: 2011-12-12

引用 9 楼 qianjin036a 的回复:
你是两个表,用union all就相当于一句查询语句,你可以这样看:

SQL code
select 员工编号,datepart(d,进厂时间) 天数 from Employees where 状态=1 union all select 员工编号,datediff(d,离职时间,convert(varchar(8),dateadd(m,1,离职时间),120)+'01')-1 from e……

我想在CASE WHEN 里面写,因为这个结果我要用来一个过程中的部份计算.

作者: chirea   发布时间: 2011-12-12

如果要作为整体考虑的话,要从你的语句所调用的表去看,不能简单地从一个语句来考虑.因为,你的数据是从两个表中获取的.

作者: qianjin036a   发布时间: 2011-12-12