
三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!

博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!
登場人物紹介
三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!
博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!
この記事を読むメリット
ABAP7.4以降ではSELECT文の書き方がだいぶ変わり、非常に便利になりました。
ネイティブSQLで直接データベースを触れたことがある方は分かると思いますが、それと近い感覚でSQL内で演算することができるようになっています。
ここではSELECT文についての新構文を解説していくのじゃ!
※当記事ではABAP7.5以降の新構文も含みます。
・同じプログラム内で旧構文と新構文のSELECT文は同居可能です。
・1つのSELECT文の中では旧構文もしくは新構文のどちらかで記載する必要があります。
新着のSAPフリーランス案件
【MM】
【PP】
製造業向けSAP PP領域の工場展開支援
【SD】
大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(SD)
【FI】
大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(FI)
【FI】
輸送用機器企業様向けS/4導入案件支援
【CO】
【FI】
S/4HANA Privateの導入支援(開発~単体テスト)
【PP】
生産領域(PP)でのテスト工程支援
【CO】
【FI】
ハードウエアリプレイスに伴うSAPシステム検証支援
【SD】
空調機メーカーS/4導入におけるFiori設計支援
【MM】
【PP】
電気機器メーカー向けSAPの運用保守支援
【MM】
【SD】
ERPシステム要件定義支援
・新構文では取得項目は「,」を付けて指定します。
・内部テーブルや条件指定時の変数には、変数の頭に「@」を付けます
* データ取得
SELECT ebeln
bukrs
FROM ekko
INTO TABLE it_ekko
WHERE ernam = l_user.
* データ取得
SELECT ebeln,
bukrs
FROM ekko
INTO TABLE @it_ekko
WHERE ernam = @l_user.
新構文では以下のような取得の仕方も可能となりました。
SELECT FROM テーブル名
FIELDS 項目1,項目2…
WHERE 項目 = @変数
INTO TABLE @内部テーブル
SELECT ebeln
bukrs
FROM ekko
INTO TABLE it_ekko
WHERE ernam = l_user.
SELECT FROM ekko
FIELDS ebeln,
bukrs
WHERE ernam = @l_user
INTO TABLE @it_ekko.
新構文では、
・UNION / UNION ALLを用いて複数のSELECT文を一つの内部テーブルに格納することができます。
・UNION / UNION ALLを用いる際は「SELECT構文(記載順序)の追加」の構文を用い、格納先の内部テーブルは最後に一度だけ指定します。
・UNIONは重複削除され、UNION ALLは重複があってもそのまま内部テーブルにデータが格納されます。
SELECT ebeln
bukrs
FROM ekko
INTO TABLE it_ekko
WHERE ernam = l_user1.
SELECT ebeln
bukrs
FROM ekko
APPENDING TABLE it_ekko
WHERE ernam = l_user2.
SELECT FROM ekko
FIELDS ebeln,
bukrs
WHERE ernam = @l_user1
UNION
SELECT FROM ekko
FIELDS ebeln,
bukrs
WHERE ernam = @l_user2
INTO TABLE @it_ekko.
新構文では条件文(WHERE句)の左辺を演算して条件指定ができます。
SELECT FROM ztest_saplab
FIELDS zkey1,
zfltp1,
zfltp2
WHERE zint1 + zint2 < 10
INTO TABLE @it_table.
新構文ではテキストや変数を取得項目値として指定できるようになりました。
SELECT 'TEST' AS field1,
@l_text AS field2
FROM ztest_saplab
INTO TABLE @it_table.
新構文では計算した結果を取得項目値として指定できるようになりました。
SELECT 10 * 10 AS field1,
zint1 + zint2 AS field2
FROM ztest_saplab
INTO TABLE @it_table.
新構文ではDBテーブルからだけではなく内部テーブルからSELECTできるようになりました。
SELECT FROM @it_table AS TAB1 "内部テーブルから取得
FIELDS ZKEY1
INTO TABLE @it_table2.
新構文では内部テーブル・DBテーブルをJOINしたテーブルからSELECTも可能です。
SELECT FROM @it_table AS tab1
INNER JOIN makt AS tab2
ON tab1~zkey1 = tab2~maktx
FIELDS tab1~zkey1
INTO TABLE @it_table2.
新構文ではサブクエリ(副問い合わせ)も利用可能になりました。
SELECT matnr
from mara
where matnr in ( SELECT matnr
from makt
WHERE matnr = mara~matnr
and maktx = 'Frame' )
INTO TABLE @data(it_mara).
新構文ではさまざまな関数を条件(WHERE句)や取得項目(FIELD句)に使用することができるようになりました。
SELECT FROM ztest_saplab
FIELDS concat( ztext1 , ztext2 ) AS FIELD1,
lower( ztext2 ) AS FIELD2,
left( ztext3 , 4 ) AS FIELD3,
CASE ztext3
when '1' then 'GOOD'
when '2' then 'BAD'
ELSE 'NORMAL'
END AS FIELD4
WHERE concat( ztext1 , ztext2 ) = ztest_saplab~ztext3
INTO TABLE @it_table.
使用できる関数を以下にまとめます。
関数 | 内容 |
---|---|
ABS( field ) | fieldの絶対値。 |
CEIL( field ) | field以上の最小の整数に丸めた値。 |
DiV( field1,field2 ) | field1をfield2で除算した際の商(整数部分)。 |
DIVISION( field1,field2,dec ) | field1をfield2で除算して、dec(少数点の桁の位置)で四捨五入した値。 |
FLOOR( field ) | field以下の最大の整数に丸めた値。 |
MOD( field1,field2 ) | field1をfield2で除算した際の余り。 |
ROUND( field1,pos ) | field1をpos(少数点の桁の位置)で四捨五入した値。 |
関数 | 内容 |
---|---|
LEFT( field,len ) | fieldの左側から長さlenだけ切り出したの文字列。 |
RIGHT( field,len ) | fieldの右側から長さlenだけ切り出したの文字列。 |
LOWER( field ) | fieldを全て小文字に変換した文字列。 |
UPPER( field ) | fieldを全て大文字に変換した文字列。 |
INITCAP( field ) | fieldの単語の文字列の最初の文字を大文字に変換し、それ以外の文字を小文字に変換した文字列。 |
LENGTH( field ) | fieldの文字数。 |
SUBSTRING( field,pos,len ) | fieldから、文字の位置posから長さlenだけ切り出した文字列。 |
INSTR( field1,field2 ) | field1から文字列field2が最初に出現する位置。 |
REPLACE( field1,field2,field3 ) | field1の文字列に対し、field2をfield3に置換した文字列 |
CONCAT( field1,field2 ) | field1,field2を連結した文字列。 |
CONCAT_WITH_SPACE( field1,field2,len ) | field1,field2を長さlenのスペースを間に挟んで連結した文字列。 |
LTRIM( field,char ) | fieldの文字列の左側の文字charを削除した文字列。 |
RTRIM( field1,char ) | fieldの文字列の右側の文字charを削除した文字列。 |
LPAD( field1,len,field2 ) | field1を長さlenだけ切り出した文字列。 その際、長さlenに満たない場合は左側に文字列field2を埋めた文字列となる。 |
RPAD( field1,len,field2 ) | field1を長さlenだけ切り出した文字列。 その際、長さlenに満たない場合は右側に文字列field2を埋めた文字列となる。 |
関数 | 内容 |
---|---|
CASE field1 WHEN value1 THEN return1 WHEN value2 THEN return2 … ELSE return3 END | field1の値が、 ・value1の時にreturn1を返す。 ・value2の時にreturn2を返す。 … ・上記以外の時にreturn3を返す。 |
CASE WHEN cond1 THEN return1 WHEN cond2 THEN return2 … ELSE return3 END | ・条件式cond1が正の時にreturn1を返す。 ・条件式cond2が正の時にreturn2を返す。 … ・上記以外の時にreturn3を返す。 ※上に記載している条件が優先される。 |
COALESCE( field1,field2,field3,… ) | field1,field2,field3…のうち、最初にNULLではない値を返す。 |
SELECTに関するABAP7.4以降の新構文についての解説は以上じゃ。
まだ新構文はあるので、都度更新していくぞい!
新着のSAPフリーランス案件
【MM】
【PP】
製造業向けSAP PP領域の工場展開支援
【SD】
大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(SD)
【FI】
大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(FI)
【FI】
輸送用機器企業様向けS/4導入案件支援
【CO】
【FI】
S/4HANA Privateの導入支援(開発~単体テスト)
【PP】
生産領域(PP)でのテスト工程支援
【CO】
【FI】
ハードウエアリプレイスに伴うSAPシステム検証支援
【SD】
空調機メーカーS/4導入におけるFiori設計支援
【MM】
【PP】
電気機器メーカー向けSAPの運用保守支援
【MM】
【SD】
ERPシステム要件定義支援
SAPラボでは、SAPの知識を活かして副業をしたい方を募集してるのじゃ!
SAPラボのライターの特徴
・ライティング初心者OK!
・報酬高単価!
・業務委託契約なので副業として最適!
SAP記事執筆者としての活動実績として利用可能なので、転職時や案件探しの際に企業へのアピール材料にもなります。
募集要項
・SAP導入や運用保守プロジェクトへの参画経験1年以上
ご応募/お問合せ先
info@sap-labo.com
少しでもご興味ある方、ぜひお気軽にご連絡下さい!