2017-12-17 18 views
0

기록이란 이전 달의 데이터를 다음 달에 추가한다는 것을 의미합니다. 예를 들어다음달의 이전 달의 데이터 추가, SAP HANA 계산보기의 데이터 히스토리

: 입력 :

ID STATUS YEAR MONTH 
A OPEN 2017-01 
A CLOSED 2017-03 
B OPEN 2017-01 
B Closed 2017-05 

내 O의 /의 P :

YEAR MONTH  COUNT-OPEN       COUNT-CLOSED 
2017-01  2(both A & B OPEN)      0 
2017-02  2(FROM 201701)       0 
2017-03  2(from 2017-02)-1(A Closed now)=1 1 
2017-04  1(from 201703)=1     1(from prev month) 
2017-05  1-1(b closed)=0      1+1(b closed)=2 

값 난 그냥 당신이 논리를 이해하기 위해 공식을 쓴 실제 O/P이다. 데이터를 추가해야합니다. 이전 달에서 다음 달로 마감됩니다. SAP HANA W/O에서 커서를 사용할 수 있습니까? 커서를 사용하여 수행 할 수 있으므로 다른 논리가 있다면 도와주세요!

답변

0

이 요구 사항을 해결하기 위해 HANA 데이터베이스에서 숫자 표를 사용하도록 제안 할 수 있습니다. 다음 부분에서, 나는 특정 범위

with input as (
    select 
     id, 
     status, 
     year, 
     cast(month as integer) month, 
     case when status = 'OPEN' then 1 else -1 end as COUNT_OPEN, 
     case when status = 'CLOSED' then 1 else 0 end as COUNT_CLOSED 
    from Historization 
) 
SELECT 
    y.rownum as year, 
    m.rownum as month, 
    (select sum(COUNT_OPEN) from input where year <= y.rownum and month <= m.rownum) as COUNT_OPEN, 
    (select sum(COUNT_CLOSED) from input where year <= y.rownum and month <= m.rownum) as COUNT_CLOSED 
FROM Numbers_Table(2017) as y 
CROSS JOIN Numbers_Table(12) as m 
where y.rownum = 2017 
order by y.rownum, m.rownum 

에서 날짜의 일련의 생성이 numbers table function을 사용한 적이있는 SQLScript 코드 당신은 내가 외부의 숫자 기능 "Numbers_Table"를 사용하는 참조를 공유 한 조인 절의 FROM 부분을 만드는 SELECT 문

COUNTs를 시뮬레이트하기 위해 OPEN 상태가되기 전에 레코드를 닫을 수 없다고 가정하므로 OPEN 상태 일 때 OPEN 상태 수에 1을 더합니다. 레코드가 닫히는 동안 CLOSED 상태에 1을 추가합니다. 하지만 여기의 트릭은 닫는 항목에 대해 OPEN 상태로 -1을 사용합니다. 집계 함수 나 도움() SUM은, 최종 행 데이터

출력은 다음과 같다 얻을

enter image description here