7.40 버전 이후 사용 가능해진, SQL구문을 알아보기.
DATA SOURCE 란?
DATA TABLE, VIEW, CDS VIEW, @ITAB 등이 될 수 있는 OBJECT 뜻함.
SQL 구문은 DB TABLE, VIEW 만 사용 가능했으나, ABAP 7.51 ~ 7.52부터는 INTERNAL TABLE을 DB TABLE과 JOIN할 수 있게 기능이 제공 됨
@ITAB의 경우에는 반드시, HEADER LINE이 없는 인터널 테이블의 경우에만 FROM@ITAB이 사용 가능함.
과거에는 FOR ALL ENTEIS 구문을 통해서만, INTERNAL TABLE과 DB TABLE의 동일 KEY 값을 가져올 수 있었으나 지금은 JOIN도 사랑 할 수 있개 개선됨
FOR ALL ANTRIES 구문은 GROUP BY를 사용할 수 없었으나, INTERNAL TABLE JOIN구문은 정상적으로 GROUP BY 구문을 사용할 수 있게 기능제공
TYPES : TYT_SCARR TYPE TABLE OF SCARR.
DATA : GT_SCARR TYPE TYT_SCARR WITH HEADER LINE.
PERFORM FUNCTION TABLES GT_SCARR.
*----------------------------------------------------------
* FORM FUNCTION
*----------------------------------------------------------
FORM FUNCTION TABLES PT_SCARR TYPE TYT_SCARR.
DATA : GT_TMP TYPE TYT_SCARR.
GT_TMP[] = PT_SCARR[].
SELECT * FROM @GT_TMP AS A
INNER JOIN SFLIGHT AS B
ON A~CARRID = B~CARRID
INTO TABLE @DATA(LT_DATA).
DATA : GT_SPFLI TYPE TABLE OF SPFLI.
SELECT * FROM SPFLI
INTO CORRESPONDING FIELDS OF TABLE @GT_SPFLI.
* FROM DATA SOURCE IS POSSIBLE TO GROUP BY FUNCTION
SELECT A~CARRID,
A~CONNID
* AVG( B~PRICE AS DEC ( 15 , 2 ) ) AS PRICE
FROM @GT_SPFLI AS A
INNER JOIN SFLIGHT AS B
ON A~CARRID = B~CARRID
AND A~CONNID = B~CONNID
GROUP BY A~CARRID,
A~CONNID
INTO TABLE @DATA(LT_DATA2).
DATA CARRIDS TYPE RANGE OF SFLIGHT-CARRID.
WITH
+FLIGHTS AS ( SELECT FROM SFLIGHT
FIELDS CARRID,
CONNID,
AVG( SEATSOCC AS DEC( 16 ,2 ) ) AS AVG
WHERE CARRID IN @CARRIDS
GROUP BY CARRID, CONNID
ORDER BY CARRID, CONNID UP TO 1 ROWS )
##DB_feature_mode[lime_in_subselect_or_cte]
SELECT FROM +FLIGHTS AS F
INNER JOIN SCARR AS S
ON F~CARRID = S~CARRID
FIELDS S~CARRNAME, F~CONNID, F~AVG
ORDER BY S~CARRNAME, F~CONNID
INTO TABLE @DATA(ITAB).
CL_DEMO_OUTPUT=>DISPLAY( LT_DATA2[] ).
ENDFORM.