[英]Access IIF expression convert to SQL
我继承了下面的IIF语句,试图将其转换为SQL Where条件的Access查询。 我已经玩了几天,但无法获得相同的结果。 任何帮助,将不胜感激。
访问
WHERE (((IIf([EFFDATE]-[MATDATE]<>[PDU_DAYS]-1 And [Calc_Type]="Cycles",IIf([PDU_DAYS] Between [30DayDQMin]+1 And [89DayDQMax]+1,"Yes","No"),IIf([PDU_DAYS] Between 31 And 90,"Yes","No")))="Yes"));
对于SQL代码,我一直在尝试各种布尔语句,例如以下语句。 我也尝试过建立一些案例逻辑。 到目前为止没有运气。
([EffDATE]-[MatDate] <> [PDU_Days]-1 and CalcType = 'Cycles' and PDU_Days Between [30DayDQMin]+1 and [89DayDQMax]+1 or PDU_Days Between 31 and 90)
您应该成功使用以下几种CASE WHEN x THEN a ELSE b END指令:
WHERE
CASE WHEN (([EFFDATE]-[MATDATE]<>[PDU_DAYS]-1) And ([Calc_Type]='Cycles')) THEN
CASE WHEN (([PDU_DAYS] Between [30DayDQMin]+1) And ([89DayDQMax]+1))
THEN 'Yes' ELSE 'No' END
ELSE
CASE WHEN ([PDU_DAYS] Between 31 And 90) THEN 'Yes' ELSE 'No' END
END
= 'Yes'
注意T-SQL单引号样式!
这是等效的SQL-Server语法:
(
CASE WHEN ([EFFDATE]-[MATDATE] <> [PDU_DAYS]-1 AND [Calc_Type]= 'Cycles') THEN
CASE WHEN ([PDU_DAYS] BETWEEN [30DayDQMin]+1 AND [89DayDQMax]+1) THEN 'Yes' ELSE 'No' END
ELSE
CASE WHEN [PDU_DAYS] BETWEEN 31 AND 90 THEN 'Yes' ELSE 'No' END
END
) = 'yes'
如果[MATDATE]
和[EFFDATE]
是datetime
字段,则:
(
CASE WHEN (DATEDIFF(dd,[MATDATE],[EFFDATE]) <> [PDU_DAYS]-1 AND [Calc_Type]= 'Cycles') THEN
CASE WHEN ([PDU_DAYS] BETWEEN [30DayDQMin]+1 AND [89DayDQMax]+1) THEN 'Yes' ELSE 'No' END
ELSE
CASE WHEN [PDU_DAYS] BETWEEN 31 AND 90 THEN 'Yes' ELSE 'No' END
END
) = 'Yes'
您确实不需要所有条件卷积,这应该产生相同的结果:
WHERE ([EFFDATE]-[MATDATE]<>[PDU_DAYS]-1
AND [Calc_Type]="Cycles"
AND ([PDU_DAYS] BETWEEN [30DayDQMin]+1 AND [89DayDQMax]+1)
)
OR ([PDU_DAYS] Between 31 And 90)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.