日期:2014-05-18  浏览次数:20426 次

如何生成《在职月份表》
sql server 2K 表A:
------------------------------------
员工 入厂日 离职日
A 2007-7-1 2007-9-3
B 2007-6-3 2007-7-21
...

存储过程如何生成下表:
------------------------------------
员工 在职年份 在职月份
A 2007 7
A 2007 8
A 2007 9
B 2007 6
B 2007 7

谢谢!

------解决方案--------------------
SQL code
create table tb(员工 varchar(10),入厂日 datetime,离职日 datetime)
insert into tb values('A','2007-7-1','2007-9-3') 
insert into tb values('B','2007-6-3','2007-7-21') 
go
select top 1000 id=identity( int,0,1) into tmp from syscolumns a,syscolumns b

select distinct 员工,year(日期) 在职年份,month(日期) 在职月份 from
(
   select a.员工,dateadd(day,b.id,入厂日) 日期 from tb a, tmp b where dateadd(day,b.id,入厂日) <= a.离职日
) t
order by 员工
drop table tb,tmp

/*
员工         在职年份        在职月份        
---------- ----------- ----------- 
A          2007        7
A          2007        8
A          2007        9
B          2007        6
B          2007        7

(所影响的行数为 5 行)
*/

------解决方案--------------------
select distinct 员工,year(日期) 在职年份,month(日期) 在职月份 from
(
select a.员工,dateadd(month,b.id,入厂日) 日期 from tb a, tmp b where dateadd(month,b.id,入厂日) <= a.离职日
) t
order by 员工
------解决方案--------------------
select top 1000 id=identity( int,0,1) into tmp from syscolumns a
select distinct 员工,year(日期) 在职年份,month(日期) 在职月份 from
(
select a.员工,dateadd(month,b.id,入厂日) 日期 from tb a, tmp b where dateadd(month,b.id,入厂日) <= a.离职日
) t
order by 员工