2017-12-05 14 views
0

SAP HANAの開発に忙しかったが、通貨換算の問題が発生しました。SAP HANA:期日が最大の参加登録

参加の左側には、受注伝票番号、得意先依頼納品日付、および伝票通貨(VBAK/VBAP)の指図値が表示されます。参加権の右側には、MAER(月間平均為替レート)でフィルタリングされたTCURRテーブル(SAPから)が含まれており、受注から伝票通貨に結合された "通貨"が投影されています。伝票通貨の値をEURに変換する必要がありますが、TCURRで使用可能な最新の為替レートを選択する必要があります。どうすれば参加できますか?したがって、受注からmax(為替レート日付)までの日付に参加する必要がありますが、Sales Orderの日付以下でなければなりません。

答えて

1

あなたはHANAデシベルSQLScript以下を確認してくださいでした

私はEUR に各通貨変換のための最新のエントリを取得し、VBAKテーブルにこのCTEテーブル(最後の1 CTE3)に参加するために multiple SQL CTE expressions on HANA SQLScriptを使用

私は実際に通貨レートを使用した量convertionをしなかった、私はあなたが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; 

こんにちはアーニー、の上など、乗算や除算を使用して、それを扱うことができると思います2番目のコメントによると、私はTCURRテーブルからNULLのレコードがあり、私はそれはあなたのデータベース上で動作するかどう幸せになると、あなたのフィードバック

を得るでしょう

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 

を次のようにSQLScriptビットを照会変更しました通貨レートの入力がないか、文書通貨がすでにEURと定義されているため(実際にはレートは1に等しいはずです)

+0

良い日Eralper!本当にありがとうございます - それは100%働いた。ワオ!!とても有難い。私は今使用のためにカスタマイズしますが、原則は健全です! –

+0

おはようございます。私はHANAとSQLの両方であなたのコードを試してみましたが、それは動作しますが、私の問題は100%解決できません。実際の問題は、為替レートをSO日付に等しいかそれ以下に戻すことです(為替レートはできるだけ近く、SO日付まで小さくします)。しかし、ありがとう - あなたのコードは私にいくつかの方向を与える。 –

+0

こんにちはアーニー、私は2番目のクエリを追加しました。あなたもそれをチェックしてください。 – Eralper