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

如何对以下记录进行筛选?
表:people
id       name         sex     rusj                     zhiwu
1         张三         男       2004-01-01         士兵
2         李五         男       2003-05-05         连长
3         李九         男       2002-05-05         排长
4         孙四         男       2002-02-05         营长
5         孙红         女       2002-02-05         后勤

需要按以下3个条件筛选出结果,符合结果的人员可以获得津贴。
1排长以上级别(包括排长)rusj满1年
2士兵rusj满3年,后勤人员满2年。
我想按时间段查询在时间段内满足以上条件的筛选出来。比如:
2003-01-01     到2004-01-01     结果:
3         李九         男       2002-05-05         排长
4         孙四         男       2002-02-05         营长




------解决方案--------------------
select * from people where datediff(year,rusj,getdate())> (case zhiwu when '士兵 ' then 3 when '后勤 ' then 2 else 1 end)
------解决方案--------------------
create table people(id int, name varchar(20), sex varchar(10), rusj datetime, zhiwu varchar(20))
insert into people select 1 , '张三 ' , '男 ' , '2004-01-01 ' , '士兵 ' union all
select 2 , '李五 ' , '男 ' , '2003-05-05 ' , '连长 ' union all
select 3 , '李九 ' , '男 ' , '2002-05-05 ' , '排长 ' union all
select 4 , '孙四 ' , '男 ' , '2002-02-05 ' , '营长 ' union all
select 5 , '孙红 ' , '女 ' , '2002-02-05 ' , '后勤 '


select * from people where datediff(year,rusj, '2004-01-01 ')> (case zhiwu when '士兵 ' then 3 when '后勤 ' then 2 else 1 end)

------------
3 李九 男 2002-05-05 00:00:00.000 排长
4 孙四 男 2002-02-05 00:00:00.000 营长
------解决方案--------------------
--try

select * from people where zhiwu= '士兵 ' and rusj between '2003-01-01 ' and '2004-01-01 ' and
datediff(year, rusj, getdate())
-case when dateadd(month, datediff(month, rusj, getdate()), rusj)> getdate()
then 1 else 0 end> 3
union all
select * from people where zhiwu= '后勤 ' and rusj between '2003-01-01 ' and '2004-01-01 ' and
datediff(year, rusj, getdate())
-case when dateadd(month, datediff(month, rusj, getdate()), rusj)> getdate()
then 1 else 0 end> 2
union all
select * from people where zhiwu not in( '后勤 ', '士兵 ') and rusj between '2003-01-01 ' and '2004-01-01 ' and
datediff(year, rusj, getdate())
-case when dateadd(month, datediff(month, rusj, getdate()), rusj)> getdate()
then 1 else 0 end> 0
------解决方案--------------------
create table people(id int, name nvarchar(10), sex nvarchar(10), rusj datetime, zhiwu nvarchar(10))
insert people select 1, '张三 ', '男 ', '2004-01-01 ', '士兵 '