#やること
VBKD(販売伝票:ビジネスデータ)や、VBPA(販売伝票:取引先)のように、ヘッダデータと明細データが同じテーブルに格納されている場合のデータ抽出について。
こちらのテーブルから明細に関する情報を取得する場合は、①明細データが存在したら明細データを、②存在しなかったらヘッダデータを取得する必要があります。
いままで、明細&ヘッダのデータを抽出してからREAD TABLEで、とか、SELECT CASEとかやりましたが、SELECT COALESCE でスッキリ書けたので、サンプルを書いておきます。
#参考
COALESCEに関するSAP HELPはこちら
#サンプル
以下、VBKDの請求日(FKDAT)を取得する場合
SELECT_VBKD.abap
SELECT
FROM VBAP
INNER JOIN VBKD AS HEADER "ヘッダデータ
ON VBAP~VBELN = HEADER~VBELN
AND HEADER~POSNR IS INITIAL
LEFT OUTER JOIN VBKD AS DETAIL "明細データ
ON VBAP~VBELN = DETAIL~VBELN
AND VBAP~POSNR = DETAIL~POSNR
FIELDS
VBAP~VBELN,
VBAP~POSNR,
COALESCE( DETAIL~FKDAT, HEADER~FKDAT ) AS FKDAT, "明細が存在すれば明細、なければヘッダ
DETAIL~FKDAT AS D, "明細
HEADER~FKDAT AS H "ヘッダ
INTO TABLE @DATA(RESULT).
CL_DEMO_OUTPUT=>DISPLAY( RESULT ).