判断资格是否已过期的案例陈述
case statement to find if qualification has expired
如果某人的资格已过期,我需要锻炼。一旦某人完成了课程,该课程将从完成之日起的 3 年内到期。如果他们的资格已过期但他们有指定日期,那么这将被视为有效
我目前拥有的
EmployeeID course Completed Date Nominated
1 IT 2021-06-18
2 IT 2020-10-10
3 IT 2017-01-01
4 IT 2017-01-01 2022-05-01
我想要什么
EmployeeID course Completed Date Nominated Expiry Valid
1 IT 2021-06-18 2024-06-18 Yes
2 IT 2020-10-10 2023-10-10 Yes
3 IT 2017-01-01 2020-01-01 No
4 IT 2017-01-01 2022-05-01 Yes
我已经成功创建了过期列,需要有关 'Valid' 案例陈述的帮助
cast(dateadd(year,3 ,[Completed_Date]) as date) as [Expiry]
对 DRY 和 case
表达式使用 cross apply
:
select t.*, expiry, case
when nominated >= currdate then 'yes'
when expiry >= currdate then 'yes'
else 'no'
end as valid
from t
cross apply (select
cast(current_timestamp as date),
dateadd(year, 3, completed_date)
) as ca(currdate, expiry)
你需要 Subquery
和 iif
才能得到你想要的结果,首先使用下面的查询来生成
你的数据
declare @a TABLE(
EmployeeID Int NOT NULL,
course VARCHAR(30) NOT NULL,
completed_date Date,
Nominated Date
);
INSERT INTO @A(
EmployeeID, course, completed_date, Nominated
)
VALUES
(1, 'IT', '2021-06-18', NULL),
(2, 'IT', '2020-10-10', NULL),
(3, 'IT', '2017-01-01', NULL),
(4, 'IT', '2017-01-01', '2022-05-01');
Expiray
列为
关注
Iif(nominated IS NULL, Cast(Dateadd(year, 3, completed_date) AS DATE),
NULL)
AS
[Expiry]
然后使用子查询如下
SELECT employeeid,
course,
completed_date,
nominated,
expiry,
Iif(expiry < Getdate()
OR nominated < Getdate(), 'No', 'Yes') valid
FROM (SELECT employeeid,
course,
completed_date,
nominated,
Iif(nominated IS NULL, Cast(Dateadd(year, 3, completed_date) AS DATE),
NULL)
AS
[Expiry]
FROM @a) B
如果某人的资格已过期,我需要锻炼。一旦某人完成了课程,该课程将从完成之日起的 3 年内到期。如果他们的资格已过期但他们有指定日期,那么这将被视为有效
我目前拥有的
EmployeeID course Completed Date Nominated
1 IT 2021-06-18
2 IT 2020-10-10
3 IT 2017-01-01
4 IT 2017-01-01 2022-05-01
我想要什么
EmployeeID course Completed Date Nominated Expiry Valid
1 IT 2021-06-18 2024-06-18 Yes
2 IT 2020-10-10 2023-10-10 Yes
3 IT 2017-01-01 2020-01-01 No
4 IT 2017-01-01 2022-05-01 Yes
我已经成功创建了过期列,需要有关 'Valid' 案例陈述的帮助
cast(dateadd(year,3 ,[Completed_Date]) as date) as [Expiry]
对 DRY 和 case
表达式使用 cross apply
:
select t.*, expiry, case
when nominated >= currdate then 'yes'
when expiry >= currdate then 'yes'
else 'no'
end as valid
from t
cross apply (select
cast(current_timestamp as date),
dateadd(year, 3, completed_date)
) as ca(currdate, expiry)
你需要 Subquery
和 iif
才能得到你想要的结果,首先使用下面的查询来生成
你的数据
declare @a TABLE(
EmployeeID Int NOT NULL,
course VARCHAR(30) NOT NULL,
completed_date Date,
Nominated Date
);
INSERT INTO @A(
EmployeeID, course, completed_date, Nominated
)
VALUES
(1, 'IT', '2021-06-18', NULL),
(2, 'IT', '2020-10-10', NULL),
(3, 'IT', '2017-01-01', NULL),
(4, 'IT', '2017-01-01', '2022-05-01');
Expiray
列为
关注
Iif(nominated IS NULL, Cast(Dateadd(year, 3, completed_date) AS DATE),
NULL)
AS
[Expiry]
然后使用子查询如下
SELECT employeeid,
course,
completed_date,
nominated,
expiry,
Iif(expiry < Getdate()
OR nominated < Getdate(), 'No', 'Yes') valid
FROM (SELECT employeeid,
course,
completed_date,
nominated,
Iif(nominated IS NULL, Cast(Dateadd(year, 3, completed_date) AS DATE),
NULL)
AS
[Expiry]
FROM @a) B