代码之家  ›  专栏  ›  技术社区  ›  Ernie van Wyk

SAP HANA:创建一个最大启用日期的连接

  •  0
  • Ernie van Wyk  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Eralper    7 年前

    请检查以下HANA db SQLScript好吗

    我用过 multiple SQL CTE expressions on HANA 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表中有空记录,因为没有货币汇率条目,或者文档货币已定义为欧元(实际上,汇率应等于1)