如何在SQL中使用if语句

时间:2017-01-24 19:44:20

标签: sql ms-access

我在Microsoft Access中有一个调度数据库。我有一个表格,其中有我的订单,并使用两个不同的查询与if语句来计算估计的发货日期,我有30列,在我使用,IIf([engraving]>0,Date()+18,IIf([plating]>0,Date()+17的两个查询之间,依此类推...... ..

我想知道是否有更简单的方法在SQL中执行此操作,因为我必须联合两个不同的查询,即使我没有使用union all,我也会得到重复。 根据要求添加了更多内容:

SELECT IIf([BLAST]>0,Date()+18,IIf([Strip Cu-Ni]>0,Date()+18,IIf([Strip Hard Face]>0,Date()+17,IIf([Repair Determination]>0,Date()+16,IIf([Machine For Patch]>0,Date()+16,IIf([Fit Up]>0,Date()+15,IIf([EB Weld]>0,Date()+15,IIf([Bader]>0,Date()+14,IIf([Local Straightening]>0,Date()+13,IIf([Hot Die]>0,Date()+12,IIf([Vapor Hone]>0,Date()+11))))))))))) AS [Estimated Ship Date], [Front End Classic].[CUSTOMER NAME], [Front End Classic].Priority, [Front End Classic].FAMILY, [Front End Classic].[PO#], [Front End Classic].[DATE RECEIVED], [Front End Classic].Priority, [Front End Classic].qty, [Front End Classic].Blast, [Front End Classic].[Strip Cu-Ni], [Front End Classic].[Strip Hard Face], [Front End Classic].CMM, [Front End Classic].[Repair Determination], [Front End Classic].UT, [Front End Classic].[Machine For Patch], [Front End Classic].[Fit Up], [Front End Classic].[EB Weld], [Front End Classic].Bader, [Front End Classic].[Local Straightening], [Front End Classic].[Hot Die], [Front End Classic].[Vapor Hone], [Front End Classic].[Prep Shroud], [Front End Classic].[Weld Shroud], [Front End Classic].[Prep Tip], [Front End Classic].[Weld Tip], [Front End Classic].[Mill Tip], [Front End Classic].[Mill Shroud], [Front End Classic].Blend, [Front End Classic].[Stress Relief], [Front End Classic].FPI, [Front End Classic].[X-Ray], [Front End Classic].PEEN, [Front End Classic].ECI, [Front End Classic].HVOF, [Front End Classic].Vibro, [Front End Classic].[CU-NI], [Front End Classic].Seals, [Front End Classic].[Moly Dag]
FROM [Front End Classic]
WHERE (((IIf([BLAST]>0,Date()+18,IIf([Strip Cu-Ni]>0,Date()+18,IIf([Strip Hard Face]>0,Date()+17,IIf([Repair Determination]>0,Date()+16,IIf([Machine For Patch]>0,Date()+16,IIf([Fit Up]>0,Date()+15,IIf([EB Weld]>0,Date()+15,IIf([Bader]>0,Date()+14,IIf([Local Straightening]>0,Date()+13,IIf([Hot Die]>0,Date()+12,IIf([Vapor Hone]>0,Date()+11)))))))))))) Is Not Null));

1 个答案:

答案 0 :(得分:0)

我会探索使用Switch功能,这将更加清洁。即。

日期()+ SWITCH([剥离Cu-Ni]> 0,18,[剥离硬面]> 0,17等)作为[EstimatedShipDate]

请注意,评估为true的第一个条件(从左向右读取)将解析开关并退出。

老实说,看起来您的数据模型并不能很好地满足您的需求,但您可能无法改变它。 : - )

希望它有所帮助...