SAP HANA:创建一个具有最大启用日期的联接
我正忙于SAP HANA开发,但遇到了货币转换问题SAP HANA:创建一个具有最大启用日期的联接,hana,Hana,我正忙于SAP HANA开发,但遇到了货币转换问题 在联接的左侧,我有一个带有销售订单号、客户请求的交货日期和订单值(以文档货币表示)(来自VBAK/VBAP)的投影。在联接的右侧,我有一个包含TCURR表(来自SAP)的投影,该表根据MAER(月平均汇率)进行过滤,并将“from currency”联接到销售订单中的文档货币。我需要将文档货币的值转换为欧元,但必须选择TCURR中可用的最新汇率。我如何加入?因此,实际上,我需要将销售订单日期加入到max(汇率日期)中,但必须小于或等于销售订单日
在联接的左侧,我有一个带有销售订单号、客户请求的交货日期和订单值(以文档货币表示)(来自VBAK/VBAP)的投影。在联接的右侧,我有一个包含TCURR表(来自SAP)的投影,该表根据MAER(月平均汇率)进行过滤,并将“from currency”联接到销售订单中的文档货币。我需要将文档货币的值转换为欧元,但必须选择TCURR中可用的最新汇率。我如何加入?因此,实际上,我需要将销售订单日期加入到max(汇率日期)中,但必须小于或等于销售订单日期 请检查以下HANA db SQLScript,好吗 我过去常常得到每种货币兑换成欧元的最新条目 然后将此CTE表(最后一个CTE3)连接到VBAK表 我实际上没有使用货币汇率进行金额转换,我认为您可以使用选择列表中的乘法或除法等进行处理
with cte as (
select
to_date( to_nvarchar(99999999 - gdatu) ) gdate,
*
from "SAPS4S".TCURR
where tcurr = 'EUR'
), cte2 as (
select
row_number() over (partition by fcurr, YEAR(gdate), MONTH(gdate) order by gdate desc) as rn,
YEAR(gdate) as gdate_year,
MONTH(gdate) as gdate_month,
*
from cte
), cte3 as (
select * from cte2 where rn = 1
)
select
vbeln,
erdat,
netwr,
waerk,
cte3.*
from "SAPS4S".VBAK as vbak
left join cte3
on
vbak.waerk = cte3.fcurr and
YEAR(vbak.erdat) = cte3.gdate_year and
MONTH(vbak.erdat) = cte3.gdate_month;
你好,厄尼,
根据您的第二条评论,我对SQLScript查询做了如下更改
with cte as (
select
to_date( to_nvarchar(99999999 - gdatu) ) gdate,
*
from "SAPABAP1".TCURR
where tcurr = 'EUR'
), cte2 as (
select
vbeln,
erdat,
netwr,
waerk,
sum(1) over (partition by vbeln order by gdate desc rows unbounded preceding) as rownum,
cte.*
from "SAPABAP1".VBAK as vbak
left join cte
on
vbak.waerk = cte.fcurr and
vbak.erdat >= cte.gdate
)
select *
from cte2
where ifnull(rownum,1) = 1
如果它能在你的数据库上运行并得到你的反馈,我会很高兴的
TCURR表中有空记录,因为没有货币汇率条目,或者文档货币已定义为EUR(实际上,汇率应等于1)Good day Eraper!非常感谢-它100%有效。哇!非常感谢。我现在将定制我的使用,但原则是健全的!下午好,艾拉帕。我在HANA和SQL中尝试了您的代码,虽然它可以工作,但并不能100%解决我的问题。真正的问题是返回等于或小于SO日期的货币汇率(尽可能接近SO日期但小于SO日期的汇率)。但是谢谢-你的代码给了我一些指导。嗨,厄尼,我添加了第二个查询,你能检查一下吗?你是个天才!这100%有效。谢谢你,艾拉帕。现在,我需要将我的思想集中在代码上,以尝试理解它。感谢您的良好反馈:)您能将该解决方案标记为有用吗?