我有一个表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的

解决方案 »

  1.   

    update a set status='FT' where EffectiveDate between '2012-10-01' and '2012-10-31' and status='PT'
      

  2.   

    我想写个语句获取2012-10-01到2012-10-31期间,Status由PT转变为FT所有员工的数据,应该怎样获取?
    一定要是PT转变为FT的
    是查询,不是更新
      

  3.   

    SELECT a.Staff_ID FROM Attendance_Reports a
     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?
      

  4.   


    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
    */
      

  5.   


    还差一点,这种查询查出来的有两种,一种是PT转为FT,一种是FT转为PT,我现在只要PT转为FT,应该怎么写?
    谢谢楼上的
      

  6.   

    还差一点,这种查询查出来的有两种,一种是PT转为FT,一种是FT转为PT,我现在只要PT转为FT,应该怎么写?
    谢谢楼上的
      

  7.   


    --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
    */
      

  8.   

    以上结果刚好是针对我前面写的,
    因为前面的CH003是从FT到PT的,它被过滤掉了