2017-12-05 5 views
0

SAP HANA 개발에 익숙하지만 통화 변환 문제가 발생했습니다.SAP HANA : 최대 유효 기일을 가진 조인 만들기

조인의 왼쪽에는 판매 주문 번호, 고객 요청 납품 일 및 주문 금액이 VBAK/VBAP의 전표 통화로 표시됩니다. 조인 오른쪽에는 MAER (월평균 환율) 및 판매 주문의 문서 통화에 조인 된 "원화"로 필터링 된 TCURR 테이블 (SAP)이 포함 된 프로젝션이 있습니다. 문서 통화 값을 EUR로 변환해야하지만 TCURR에서 사용할 수있는 최신 환율을 선택해야합니다. 가입하려면 어떻게해야합니까? 따라서 효과적으로 Sales Order에서 max (환율 날짜)까지의 날짜에 참여해야하지만 Sales Order 날짜보다 작거나 같아야합니다.

답변

1

당신은 HANA DB SQLScript 다음 확인하십시오 수

내가 EUR 각 통화 변환에 대한 가장 최근의 항목을 얻을 그리고 VBAK 테이블이 CTE 테이블 (마지막 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; 

안녕하세요 어니,,617에 등 곱셈이나 나눗셈을 사용하여 처리 할 수 ​​있다고 생각는 두 번째 의견에 따르면, 나는

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 레코드가 의견을 얻을 수 있다면 행복 할 것을 다음과 같이 SQLScript 조금 쿼리 변경 환율이 입력되어 있지 않거나 문서 통화가 EUR로 정의되어 있기 때문에 (실제로 환율은 1과 같아야합니다.)

+0

좋은 하루 Eralper! 고맙습니다. 100 % 효과가있었습니다. 와우!! 매우 감사. 내 사용을 위해 사용자화할 예정이지만 원리는 확실합니다! –

+0

안녕하세요. Eralper. 나는 HANA와 SQL 모두에서 코드를 시험해 보았지만 작동하지만 100 % 문제를 해결하지 못했습니다. 진짜 문제는 환율을 소 환율과 동등하거나 그 이하로 돌려주는 것입니다 (환율은 가능한 한 가깝고 환율은 소 환율과 비슷합니다). 하지만 고마워요. 코드가 제게 어떤 방향을 제시합니다. –

+0

안녕하세요 어니, 두 번째 쿼리를 추가했습니다. 다시 확인해주세요. – Eralper