我有一个表A,里面记录着员工每天的数据,其中表A有给字段Status标识该员工是临时工,还是正式工
表结构如下:
Staff_ID EffectiveDate Status Hour
CH001 2012-10-01 PT 8
CH001 2012-10-02 PT 7
CH001 2012-10-03 PT 8
CH001 2012-10-04 FT 9
... ... .. ..我想写个语句获取2012-10-01到2012-10-31期间,Status由PT转变为FT所有员工的数据,应该怎样获取?
一定要是PT转变为FT的
表结构如下:
Staff_ID EffectiveDate Status Hour
CH001 2012-10-01 PT 8
CH001 2012-10-02 PT 7
CH001 2012-10-03 PT 8
CH001 2012-10-04 FT 9
... ... .. ..我想写个语句获取2012-10-01到2012-10-31期间,Status由PT转变为FT所有员工的数据,应该怎样获取?
一定要是PT转变为FT的
解决方案 »
- SQL SERVER REPROTING SERVICE 报表发布三种方法
- windows server 2003忘记密码,可以SqlServer可以连上
- 在查询分析器里调试执行某个带参数的存储过程,为什么这里面显示的错误和用这里面显示的select语句再调试后显示的错误不一样
- 求一个SQL文
- 急急急,关于SQLSERVER日志问题
- 恭请高手,验证技术可行性,使用触发器
- 现实查询某种条件的最大和最小值的语句如何写?
- 还愿系统数据库 master 的问题,俺是菜鸟帮帮忙。
- 请问哪里有SQL SERVER2K的个人中文版下载??我的OS是Win2k的个人版,只能装个人版的。谢谢
- 什么是实例名?
- 普通行列转换
- 重复过滤相关的问题
一定要是PT转变为FT的
是查询,不是更新
WHERE a.Staff_Status IS NOT NULL AND a.EffectiveDate >= '2012-10-21' AND a.EffectiveDate<'2012-11-30'
GROUP BY a.Staff_ID HAVING COUNT(DISTINCT a.Staff_Status) > 1这句可以查出在规定时间范围内符合有PT转为FT或,FT转为PT的数据,但是在怎么筛选出必须是PT转为FT?
if OBJECT_ID('TableA') is not null
drop table TableAgo
create table TableA
(
[Staff_ID] nvarchar(10),
[EffectiveDate] date,
[Status] nvarchar(2),
[Hour] smallint
)go
insert into TableA values
('CH001','2012-10-01','PT',8),
('CH001','2012-10-02','PT',7),
('CH001','2012-10-03','PT',8),
('CH001','2012-10-04','FT',9),
('CH002','2012-10-04','FT',9),
('CH002','2012-10-05','FT',9),
('CH002','2012-10-06','FT',9),
('CH003','2012-10-08','FT',9),
('CH003','2012-10-09','PT',9)go--SQL
select A.Staff_ID from
(select distinct Staff_ID,Status from TableA where EffectiveDate>'2012-10-01' and EffectiveDate<'2012-10-31') A
group by A.Staff_ID
having COUNT(Status)>1--结果集
/*
Staff_ID
CH001
CH003
*/
还差一点,这种查询查出来的有两种,一种是PT转为FT,一种是FT转为PT,我现在只要PT转为FT,应该怎么写?
谢谢楼上的
谢谢楼上的
--SQL
--要是正式工,其最后一次一定为FT
select M.Staff_ID from
(select A.Staff_ID from
(select distinct Staff_ID,Status from TableA where EffectiveDate>'2012-10-01' and EffectiveDate<'2012-10-31') A
group by A.Staff_ID
having COUNT(Status)>1) M inner join
(select *From TableA A where EffectiveDate=
(select MAX(EffectiveDate) EffectiveDate from TableA where Staff_ID = A.Staff_ID)) N
on M.Staff_ID=N.Staff_ID
where N.Status='FT'--结果集
/*
Staff_ID
CH001
*/
因为前面的CH003是从FT到PT的,它被过滤掉了