Hi All,
I have this Data:
DECLARE @userData TABLE( UserName varchar(max) NOT NULL, ReferDate Date not null, Expired Date not null, Category varchar(max) not null);
insert into @userData
(UserName,ReferDate,Expired,Category)
select UserName='PersonA',ReferDate='2019-03-01',Expired='2019-06-30',Category='Work' union all
select UserName='PersonA',ReferDate='2019-03-01',Expired='2019-06-30',Category='Work Half' union all
select UserName='PersonA',ReferDate='2019-04-01',Expired='2019-07-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-04-01',Expired='2019-07-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-04-01',Expired='2019-07-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-05-01',Expired='2019-08-31',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-05-01',Expired='2019-08-31',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-06-01',Expired='2019-09-30',Category='Work' union all
select UserName='PersonA',ReferDate='2019-06-01',Expired='2019-09-30',Category='Work' union all
select UserName='PersonA',ReferDate='2019-07-01',Expired='2019-10-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-07-01',Expired='2019-10-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-07-01',Expired='2019-10-31',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-07-01',Expired='2019-10-31',Category='Off 0.5 day' union all
select UserName='PersonA',ReferDate='2019-08-01',Expired='2019-11-30',Category='Work' union all
select UserName='PersonA',ReferDate='2019-08-01',Expired='2019-11-30',Category='Work' union all
select UserName='PersonA',ReferDate='2019-08-01',Expired='2019-11-30',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-08-01',Expired='2019-11-30',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-09-01',Expired='2019-12-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-09-01',Expired='2019-12-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-09-01',Expired='2019-12-31',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-10-01',Expired='2020-01-31',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-10-01',Expired='2020-01-31',Category='Off 1 day' union all
select UserName='PersonA',ReferDate='2019-11-01',Expired='2020-02-29',Category='Work' union all
select UserName='PersonA',ReferDate='2019-12-01',Expired='2020-03-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-12-01',Expired='2020-03-31',Category='Work' union all
select UserName='PersonA',ReferDate='2019-09-01',Expired='2019-12-31',Category='Off 1 day'
I managed to generate Available & Taken Leave as Below:
Declare @Date Date
set @Date = '2019-07-01'
select UserName,Category='CF',Mth=Month(@Date), Yr=Year(@Date),cnt=sum(cnt) from (
select UserName,Category='CF',Mth=Month(DateAdd(month,-3,@Date)), Yr=Year(DateAdd(month,-3,@Date)),cnt=sum(cnt) from (
select UserName,cnt=case when Category='Work Half' then count()/2.0 when Category='Work' then count()/1.0 else 0 end
from @userData where ReferDate <= dbo.udf_GetLastDayOfMonth(@Date)
group by UserName,Category
union all
select UserName,cnt=case when Category='Off 1 day' then -(count()/1.0) when Category='Off 0.5 day' then -(count()/2.0) else 0 end
from @userData where ReferDate <= dbo.udf_GetLastDayOfMonth(@Date)
group by UserName,Category
)A
group by UserName
--union all
--minus Burnt Leave query here -- How to do this portion ???
)D
group by UserName
Output:
May I know how to get below output CF?
The Available Leave need to clear within 3 month. If more than 3 month, it'll consider Burnt.
How to create a Burnt Leave query?
Please advise.
The validity only up to 3 full month, after will be disposed the balance day
Thanks.
Regards,
Micheale