日期:2014-05-18 浏览次数:20679 次
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba') BEGIN DROP TABLE tba END GO CREATE TABLE tba ( 姓名 VARCHAR(10), 入职时间 VARCHAR(10), 离职时间 VARCHAR(10) ) GO INSERT INTO tba SELECT '张三','2010-1-2',null UNION SELECT '李四','2011-1-2',null UNION SELECT '王五','2012-2-2',null UNION SELECT '赵六','2012-2-1','2012-3-3' SELECT A.姓名,CASE WHEN DATEDIFF(MONTH,A.入职时间,CASE WHEN A.离职时间 IS NULL THEN GETDATE() ELSE A.离职时间 END) / 12 < 1 THEN '1年及以下' WHEN DATEDIFF(MONTH,A.入职时间,CASE WHEN A.离职时间 IS NULL THEN GETDATE() ELSE A.离职时间 END) / 12 < 3 THEN '2年到3年' WHEN DATEDIFF(MONTH,A.入职时间,CASE WHEN A.离职时间 IS NULL THEN GETDATE() ELSE A.离职时间 END) / 12 >= 3 THEN '3年以上' END AS 工龄 FROM tba AS A ORDER BY 工龄 姓名 工龄 王五 1年及以下 赵六 1年及以下 李四 2年到3年 张三 2年到3年
------解决方案--------------------
--> 测试数据:[tb] if object_id('[tb]') is not null drop table [tb] go create table [tb]([入职时间] datetime,[离职时间] datetime) insert [tb] select '2010-1-2',null union all select '2011-1-2',null union all select '2012-2-2',null union all select '2012-2-1','2012-3-3' --------------开始查询-------------------------- select sum(case when datediff(yy,[入职时间],isnull([离职时间],getdate()))<1 then 1 else 0 end) [1年及以下], sum(case when datediff(yy,[入职时间],isnull([离职时间],getdate()))>=1 and datediff(yy,[入职时间],isnull([离职时间],getdate()))<2 then 1 else 0 end)[1到2年], sum(case when datediff(yy,[入职时间],isnull([离职时间],getdate()))>=2 and datediff(yy,[入职时间],isnull([离职时间],getdate()))<3 then 1 else 0 end)[2到3年], sum(case when datediff(yy,[入职时间],isnull([离职时间],getdate()))>3 then 1 else 0 end)[3年以上] from [tb] ----------------结果---------------------------- /* 1年及以下 1到2年 2到3年 3年以上 ----------- ----------- ----------- ----------- 2 1 1 0 (1 行受影响) */
------解决方案--------------------
CREATE TABLE tba ( 姓名 VARCHAR(10), 入职时间 VARCHAR(10), 离职时间 VARCHAR(10) ) GO INSERT INTO tba SELECT '张三','2010-1-2',null UNION SELECT '李四','2011-1-2',null UNION SELECT '王五','2012-2-2',null UNION SELECT '赵六','2012-2-1','2012-3-3' SELECT DATEDIFF(YEAR,'2011-2-1','2012-3-3') SELECT tbA.姓名,tbA.入职时间 , CASE WHEN DATEDIFF(YEAR,入职时间,ISNULL( 离职时间,getdate()))=0 THEN '一年以内' WHEN DATEDIFF(YEAR,入职时间, ISNULL( 离职时间,getdate()))>0 and DATEDIFF(YEAR,入职时间, ISNULL( 离职时间,getdate()))<2 then '二年到三年之内' WHEN DATEDIFF(YEAR,入职时间,ISNULL( 离职时间,getdate()))>2 then '三年以上' ELSE '' END AS 入职日期年限 FROM TBA order BY 入职时间 desc /* 姓名 入职时间 入职日期年限 ---------- ---------- -------- 王五 2012-2-2 一年以内 赵六 2012-2-1 一年以内 李四 2011-1-2 二年到三年之内 张三 2010-1-2 (4 行受影响) */
------解决方案--------------------