일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 남강캠프
- 오크돔
- 포천 레이크문
- m/v 호출
- FIELDCATALOG
- SAP
- 클러스터 뷰 이벤트
- 캠핑 장박
- 장박
- 해루질
- 키즈 캠핑장
- 원주 캠핑장
- ABAP
- 가족캠핑
- 블로우쉘터
- 영월 장박
- 우중캠핑
- view cluster
- reduce
- 키즈캠핑장
- WD4A
- fuzzy search
- include name
- alv with ida
- Hana
- 일몰맛집
- New Syntax
- HANA SQL
- 값 제한
- view 조건
Archives
- Today
- Total
Do.
ABAP CTE( Common Table Expressions) 본문
728x90
해당 기능은 ABAP 7.51 부터 지원한다.
CTE는 Internal Table간의 Join을 지원합니다.
아래 예제를 보면 이해가 편할듯 하네요.
"-- Get EKBE
WITH +base AS ( SELECT a~ebeln, a~ebelp, a~werks, a~matnr,
CASE WHEN shkzg = 'S'
THEN SUM( a~menge ) * -1
ELSE SUM( a~menge )
END AS menge
FROM ekbe AS a
INNER JOIN @lt_ekko AS b ON b~ebeln = a~ebeln
AND b~ebelp = a~ebelp
WHERE vgabe = '1'
AND a~werks = @i_werks
GROUP BY a~ebeln, a~ebelp, a~shkzg, a~werks, a~matnr ) ,
"-- EKBE Group by
+sum AS ( SELECT
FROM +base AS a
FIELDS ebeln, ebelp, werks, matnr,
SUM( menge ) AS menge
GROUP BY ebeln, ebelp, werks, matnr )
"-- Set EKBE Return
SELECT *
FROM +sum
INTO TABLE @DATA(lt_ekbe).
위 예제는 구매문서, 항번, 자재, 플랜트별 수량 합계를 CTE로 구현한 예로써 차대변 지시자를 기준으로 계산을 해줍니다.
기존대로라면 가져와서 Loop 돌면서 계산을 해주었겠지만 개발 서버 버전이 높아서 CTE를 통해 구현을 해보았습니다.
참고로 With 에서 마침표까지가 하나의 With문으로 +base 는 다른 With에서 사용할 수 없습니다.
동일한 이름으로 다른 구조를 가지도록 선언해도 됩니다.
아래는 같은 Function의 다른로직
"-- Get PO Data
WITH +base AS ( SELECT a~lifnr, b~ebeln, b~ebelp, b~werks, b~matnr,
CASE WHEN retpo = 'X'
THEN SUM( menge ) * -1
ELSE SUM( menge )
END AS menge
FROM ekko AS a
INNER JOIN ekpo AS b ON b~ebeln = a~ebeln
WHERE b~werks IN @r_werks
AND b~bstyp EQ 'F'
AND a~bsart IN ('NB','SB')
AND a~loekz EQ @space
AND b~elikz EQ @space
AND b~loekz EQ @space
"-- 제외할 저장위치
AND b~lgort NOT IN ( SELECT lgort
FROM mdlg
WHERE werks EQ @i_werks )
GROUP BY a~lifnr, b~ebeln, b~ebelp, b~werks, b~matnr, b~retpo ),
"-- EKKO Group by
+sum AS ( SELECT
FROM +base AS a
FIELDS a~lifnr, a~ebeln, a~ebelp, a~werks, a~matnr,
SUM( menge ) AS menge
GROUP BY a~lifnr, a~ebeln, a~ebelp, a~werks, a~matnr )
"== Set EKKO Return
SELECT *
FROM +sum
INTO TABLE @DATA(lt_ekko).
아시다시피 HANA에서는 FOR ALL ENTRIES를 지양합니다.
CTE가 대안이 될 수 있을 것 같네요.
참고하시면 좋을듯 합니다.
728x90
'SAP > ABAP' 카테고리의 다른 글
[HANA] For All Entries의 사용 (0) | 2022.11.04 |
---|---|
HANA에서 Smartform 사용 하는 법 (0) | 2022.10.14 |
HTML 본문 메일 전송 (0) | 2022.07.28 |
ABAP 동적 구조생성 (0) | 2022.07.26 |
ABAP Debugging에 대한 설명 (0) | 2022.07.22 |