【发布时间】:2020-01-03 15:27:55
【问题描述】:
我正在创建一个查询,它将报告工具和设备及其所需的维护状态。
我有一列当前正在使用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 子句。
这可能吗?我是不是走错路了?
【问题讨论】:
-
来自CASE (Transact-SQL) - Remarks:“SQL Server 只允许在 CASE 表达式中嵌套 10 级。”。 (另请注意,它是
CASE表达式;Case(Switch) 语句在 T-SQL 中不存在。) -
注意:“bi”表示 2,而不是一半。 “两年一次”是指每 2 年一次。 “半年”是指每半年(6个月)。不要使用错误的术语给您的系统造成混乱。
标签: sql sql-server case ssms dateadd