日期:2014-05-18 浏览次数:20801 次
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 行受影响)
*/
------解决方案--------------------