【问题标题】:SAP HANA: Create a join with a max on dateSAP HANA:创建具有最大日期的联接
【发布时间】:2017-12-05 12:32:54
【问题描述】:

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

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

【问题讨论】:

    标签: hana


    【解决方案1】:

    能否请您检查以下 HANA db SQLScript

    我使用multiple SQL CTE expressions on HANA SQLScript 获取每次货币转换为欧元的最新条目 然后将这个 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 表中有 NULL 记录,因为没有货币汇率条目或文档货币已定义为 EUR(实际上汇率应该等于 1)

    【讨论】:

    • 早安埃拉珀!非常感谢 - 它工作了 100%。哇!!非常感激。我现在将根据我的使用进行定制,但原则是合理的!
    • 下午好,埃拉珀。我在 HANA 和 SQL 中都尝试了你的代码,虽然它可以工作,但它不能 100% 解决我的问题。真正的问题是返回等于或小于 SO 日期的货币汇率(因此汇率尽可能接近但小于 SO 日期)。但是谢谢 - 你的代码给了我一些方向。
    • 您好 Ernie,我添加了第二个查询,请您也检查一下
    • 你是个值得关注的天才!这 100% 有效。谢谢埃拉珀。现在我需要围绕代码来尝试理解它。
    • 感谢您的反馈 :) 您能否将解决方案标记为有用?
    猜你喜欢
    • 2017-02-03
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2023-03-06
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多