这是指我之前的帖子:链接
系统:SQL Server 2012
使用此脚本,如果 CutoffDate 的日期是星期六或星期日,我将采用星期五的值。
SELECT DISTINCT dbo.ECB.Currency + '-' + CAST(dbo.myTable.CutoffDate AS varchar(30)) AS ComboCurrDate, dbo.ECB.Rate AS ECBrate
FROM dbo.ECB INNER JOIN
dbo.myTable ON dbo.ECB.Date = CASE WHEN datepart(weekday, dbo.myTable.CutoffDate) IN (6, 7) THEN dateadd(d, - ((datepart(weekday,
dbo.myTable.CutoffDate) + 1 + @@DATEFIRST) % 7), dbo.myTable.CutoffDate) ELSE dbo.myTable.CutoffDate END AND
dbo.ECB.Currency = dbo.myTable.InvoiceCurrency
WHERE (dbo.myTable.InvoiceCurrency NOT LIKE 'EUR%')
但现在我需要重写它来处理假期。或者更好的是,处理 ECB 表中不存在的记录。
例如:对于 3 月 29 日星期五,ECB 表中没有记录,但 myTable.CutoffDate 设置为此日期。使用上面的脚本,我没有得到这一天的值。
我现在如何将 28 日的 ECB 值分配给 CutoffDate?
一般来说:如果 ECB 表中没有一天的记录,则尝试 ECB 表中的前一个日期,依此类推。
希望我能清楚地解释这一点。
感谢您的帮助。