查询岗位年限语句
求一查询语句。
存在表t 字段说明如下:
EMPLOYEE_NUMBER  工号
EMPLOYEE_NAME    姓名
EFFECTIVE_START_DATE  分配开始时间
EFFECTIVE_END_DATE    分配结束时间
NAME    岗位名称
表中数据如下:
EMPLOYEE_NUMBER	EMPLOYEE_NAME	EFFECTIVE_START_DATE	EFFECTIVE_END_DATE	NAME
8630050	张三	2012-2-1	4712-12-31	装配工.火花塞安装(2线)
8630050	张三	2011-12-19	2012-1-31	装配工.火花塞安装(2线)
8630050	张三	2011-4-1	2011-12-18	装配工..\
8630050	张三	2010-12-28	2011-3-31	装配工..\
8630050	张三	2010-2-1	2010-12-27	装配工.D.\
8630050	张三	2009-5-18	2010-1-31	装配工.D.\
8630050	张三	2008-1-1	2009-5-17	装配工.D.\
8630050	张三	2007-11-1	2007-12-31	装配工.D.\
8630050	张三	2003-7-1	2007-10-31	装配工..\
说明:1、如果effective_end_date为4712-12-31则表示员工的当前岗位为此岗位,计算当前岗位第一次分配开始时间和当前时间的年限
2、如果不是当前的岗位,计算岗位第一次分配开始时间和岗位最后一次分配结束时间
的年限
3、只计算岗位名称是联系的年限。如上表中岗位装配工..\岗位,最后一条分配记录当做一条记录来计算;2、3条记录就当做是同一次分配来计算年限
我想查询出的结果如下:
EMPLOYEE_NUMBER	EMPLOYEE_NAME	EFFECTIVE_START_DATE	EFFECTIVE_END_DATE	NAME	year
8630050	张三	2011-12-19	4712-12-31	装配工.火花塞安装(2线)	2.1
8630050	张三	2010-12-28	2011-12-18	装配工..\	0.9
8630050	张三	2007-11-1	2010-12-27	装配工.D.\	4
8630050	张三	2003-7-1	2007-10-31	装配工..\	4.3
------解决方案--------------------select EMPLOYEE_NUMBER,EMPLOYEE_NAME,EFFECTIVE_START_DATE, EFFECTIVE_END_DATE, NAME, 
[year]=CASE WHEN EFFECTIVE_END_DATE='4712-12-31' THEN DATEDIFF(DD,EFFECTIVE_START_DATE,GETDATE())/365.0 ELSE DATEDIFF(DD,EFFECTIVE_START_DATE,EFFECTIVE_END_DATE)/365.0 END FROM
(select EMPLOYEE_NUMBER,EMPLOYEE_NAME,NAME,MIN(EFFECTIVE_START_DATE) AS EFFECTIVE_START_DATE,MAX(EFFECTIVE_END_DATE) AS EFFECTIVE_END_DATE
FROM t WHERE EFFECTIVE_END_DATE<>'4712-12-31'GROUP BY EMPLOYEE_NUMBER,EMPLOYEE_NAME,NAME
UNION ALL
select EMPLOYEE_NUMBER,EMPLOYEE_NAME,NAME, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE
FROM t WHERE EFFECTIVE_END_DATE='4712-12-31') T