Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- changing value
- boole_d
- transporting
- SM36
- NEW-PAGE PRINT ON
- qfieldname
- using value
- MONAT_F4
- DP - 유한배낭
- DP - 무한배낭(순서)
- 날짜 계산 함수
- Union-Find
- 필드카탈로그
- batch job
- ZPL
- APPENDING
- READ TABLE
- CTS #CTS 이관 #SAP #ABAP
- DP - 무한배낭
- SAP GUI
- FOR ALL ENTRIES IN
- APPENDING CORRESPONDING
- cfieldname
- Dictionary Search Help
- BOJ_Gold
- ABAP
- Data Browser
- ALV Output Setting
- java
- SAP
Archives
- Today
- Total
Jin's Library
SELECT 시 인터널 테이블을 조건으로 사용할 때 본문
SELECT 시 테이블을 조건으로 사용해야 될 때가 있다.
CDS View 조인을 하다가 순간 막혀 정리해 보았다.
정리한 3가지 방법을 사용하자.
FOR ALL ENTRIES IN
SELECT a~product,
a~plant,
a~location,
a~batch,
b~locator,
b~bwtar,
a~uom,
FROM I_CdsView( P_Currency = @gv_waers ) AS a
LEFT JOIN mcha AS b ON a~product = b~matnr
AND a~plant = b~werks
AND a~batch = b~charg
FOR ALL ENTRIES IN @gt_booking
WHERE a~plant = @gt_booking-werks
AND a~product = @gt_booking-matnr
AND a~location = @gt_booking-lgort
INTO TABLE @data(lt_data).
- 테이블을 불러와서 조건으로 사용, 정말 편하다.
gt_booking 테이블의 정보를 끌어다가 바로 사용할 수 있다.
Group by 사용이 되지 않는다.
Range Value 사용
LOOP AT gt_itab INTO DATA(ls_tmp).
lt_werks[] = VALUE #( BASE lt_werks[]
sign = 'I' option = 'EQ'
( low = ls_tmp-werks ) ).
lt_matnr[] = VALUE #( BASE lt_matnr[]
sign = 'I' option = 'EQ'
( low = ls_tmp-matnr ) ).
lt_lgort[] = VALUE #( BASE lt_lgort[]
sign = 'I' option = 'EQ'
( low = ls_tmp-lgort ) ).
CLEAR ls_tmp.
ENDLOOP.
SELECT a~product,
a~plant,
a~location,
a~batch,
b~locator,
b~bwtar,
a~uom,
SUM( t_qty ) AS qty
FROM I_CdsView( P_Currency = @gv_waers ) AS a
LEFT JOIN mcha AS b ON a~product = b~matnr
AND a~plant = b~werks
AND a~batch = b~charg
WHERE a~plant IN @lt_werks
AND a~product IN @lt_matnr
AND a~location IN @lt_lgort
GROUP BY a~product, a~plant, a~location, a~batch,
b~locator, b~bwtar, a~uom
INTO TABLE @DATA(lt_data).
- 사용하고 싶은 테이블의 필드를 각각 Range 변수에 담아 in 을 사용해 Select-options처럼 사용한다.
조건마다 변수를 따로 정의해야 하는 번거로움은 있으나 가장 직관적이고 빨리 사용이 가능하다.
Group By 사용 가능하다.
Internal Table 직접 사용
select a~product,
a~plant,
a~location,
a~batch,
b~locator,
b~bwtar,
a~uom,
sum( t_qty ) as qty
FROM I_CdsStockValue( P_Currency = @gv_waers ) as a
left join mcha as b ON a~product = b~matnr
and a~plant = b~werks
and a~batch = b~charg
where a~plant in ( SELECT m~werks FROM @gt_booking AS m )
* 시도하였으나 나머지 조건 사용 불가
* and a~product in ( select n~matnr from @gt_booking as n )
* and a~location in ( select x~lgort from z_itab as x
* where x~werks = @p_werks
* and x~lgort_group in (@c_a, @c_o, @c_i) )
GROUP BY a~product, a~plant, a~location, a~batch,
b~locator, b~bwtar, a~uom
INTO TABLE @DATA(lt_data).
- where 조건에서는 인터널 테이블을 한 번만 사용 가능하다. 그렇기에 다른 조건들에 넣을 수 없다.
하지만 조건이 한번만 필요하다면 편한 방법 같다. 퍼포먼스 적인 면은 좀 더 찾아봐야 한다.
테이블을 변수처럼 @ 처리해서 사용하면 된다.
Group by 사용 가능하다.
'SAP > ABAP' 카테고리의 다른 글
| SAP GUI 바로가기 설정 (0) | 2023.12.12 |
|---|---|
| READ TABLE (0) | 2023.11.21 |
| 프로그램 실행 후 바코드 입력 (0) | 2023.11.03 |
| F4_DATE (0) | 2023.11.03 |
| MODIFY (0) | 2023.11.03 |