您可以在SSMS SQL语句中的另一个CASE和DATEADD()函数中使用CASE吗?

问题描述 投票:0回答:1

我正在创建一个查询,该查询将报告工具和设备及其所需的维护状态。我有一列当前正在使用NextDateDue字段,并将其与当前日期进行比较以查看其是否过期。查看数据后,该字段不是很可靠,因此我想按LastDateDue(最后维护完成日期)查看维护频率(例如,每年两次,每周,每月),将该频率添加到LastDateDue和检查该日期与当前日期,以确定“过期”或“就绪”。这是我当前的代码:

SELECT MS.MaintCompletionDate, RF.ObjectType, RD.ResourceName, MRB.MaintenanceReqName, MS.NextDateDue,
CASE
    WHEN MS.NextDateDue < GETDATE() THEN 'PAST DUE'
    WHEN MS.NextDateDue IS NULL THEN 'N/A'
    ELSE 'READY'
END AS MaintenanceStatus
FROM CamstarSch.ResourceDef RD
INNER JOIN CamstarSch.MaintenanceStatus MS ON RD.ResourceId = MS.ResourceId
INNER JOIN CamstarSch.ResourceFamily RF ON RF.ResourceFamilyId = RD.ResourceFamilyId
INNER JOIN CamstarSch.AssignedMaintReq AMR ON AMR.AssignedMaintReqId = MS.AssignedMaintReqId
INNER JOIN CamstarSch.MaintenanceReq MR ON AMR.MaintenanceReqId = MR.MaintenanceReqId
INNER JOIN CamstarSch.MaintenanceReqBase MRB ON MRB.MaintenanceReqBaseId = MR.MaintenanceReqBaseId
ORDER BY NextDateDue DESC;

我想以一种我认为类似于以下的方式来设置我的陈述:

   WHEN DATEADD(CASE WHEN MRB.MaintenanceReqName IS 'Bi-Annual' THEN 'month, 6,' MS.LastDateDue) < GETDATE() THEN 'PAST DUE'

每种频率类型都有更多的WHEN子句。这可能吗?我会以错误的方式进行操作吗?

sql sql-server case ssms dateadd
1个回答
0
投票

根据我对您的问题的了解,这就是您想要的:

© www.soinside.com 2019 - 2024. All rights reserved.