【发布时间】:2015-03-06 16:10:51
【问题描述】:
我正在尝试转换订单的货币汇率。 货币汇率表在该特定日期每天更新,但是可以在当天早些时候创建订单,因此汇率不会反映在当前查询中。如果当天的货币汇率不存在,我将如何添加案例语句并修改查询,使用最后一个可用的货币日期(在表中)。
@Curr 是所需的货币代码。可能是“美元”、“英镑”等。
SELECT OrderNumber
,(CASE WHEN @Curr<>cur.code THEN
o.price * (SELECT Rate FROM xchangeRates xr
WHERE xr.FromCurrCode = c.Code
AND xr.ToCurrCode = @Curr
AND xr.Date= ISNULL((SELECT TOP 1 CAST(Crtd_DateTime AS Date) FROM ApDoc apdoc
WHERE apdoc.PONbr = o.OrderNumber AND apdoc.PONbr>''
ORDER BY apdoc.Crtd_DateTime DESC),o.orderdate)
)
ELSE o.price
END ) as o.price
from orders o
join currency c on c.curcode = o.curcode
【问题讨论】:
-
为什么是CASE?为什么不是返回按日期 DESC 排序的前 1 个货币汇率的子查询?
-
或子查询....但是如果当前汇率不可用,我将如何使用它。
标签: sql sql-server sql-server-2008