SAP HANA:创建具有最大日期的联接

时间:2017-12-05 12:32:54

标签: hana

我正忙于SAP HANA开发,但遇到货币转换问题。

在联接的左侧,我有一个投影,其中包含销售订单编号,客户请求的交货日期和文档货币中的订单值(来自VBAK / VBAP)。在加入的右边,我有一个包含TCURR表(来自SAP)的预测,按MAER(月平均汇率)过滤,“货币”加入销售订单中的单据货币。我需要将文件货币的值转换为欧元,但必须选择TCURR中可用的最新汇率。我该如何加入?因此,我需要将销售订单中的日期加入到最大值(汇率日期),但必须小于或等于销售订单日期。

1 个答案:

答案 0 :(得分:1)

请您查看以下HANA db SQLScript

我使用multiple SQL CTE expressions on HANA SQLScript获取每种货币转换为EUR的最新条目 然后将此CTE表(最后一个CTE3)连接到VBAK表

我实际上没有使用货币汇率进行金额转换,我认为您可以使用SELECT列表中的乘法或除法等来处理它

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表的空记录,因为没有货币汇率输入或文件货币已经定义为欧元(实际上汇率应该等于1)