SQL Editorでは、SQL文を直接実行することができる。
テーブル確認の際、複数のテーブルを結合してデータを見たいときに、それぞれのテーブルを絞り込みすることなく、SQL文で結合して出力できる。
SQL Editor
起動経路
以下のトランザクションで実行が可能。恐らく、同じ機能であるが、ECCかS/4によって起動できる/できないが違ったり、SQL Editor以外の機能が使える/使えない、といった細かな違いがある様子。
- DB02
- DBACOCKPIT
- ST04
トランザクション起動後、診断>SQL Editor(ECCだと、SQLコマンドエディタ)で起動する。
使い方
画面中央の「入力クエリ」にSQL文を入力し、「実行」を押下する。すると「結果」タブに実行結果が表示される。
例えば、以下のSQLを使えば、該当伝票の伝票ヘッダ(BKPF)と伝票明細(BSEG)を結合したViewを表示できる。
SELECT *
FROM BSEG
INNER JOIN BKPF ON
BSEG.MANDT = BKPF.MANDT
AND BSEG.BUKRS = BKPF.BUKRS
AND BSEG.GJAHR = BKPF.GJAHR
AND BSEG.BELNR = BKPF.BELNR
WHERE
BSEG.MANDT = 'クライアント'
AND BSEG.BELNR = '伝票番号'
※クライアントと伝票番号は、環境に合わせて入力する。
コメントアウト
/* コメントアウトする文字 */
--これ以下をコメントアウトする(「--」の行以降すべてがコメントアウト)
複数選択
WHERE BSEG.BELNR IN ('伝票番号1', '伝票番号2') /* IN句で指定 */
テーブルAとテーブルBを結合し、Bにあるものの中からAを抽出 ※EXISTS
SELECT *
FROM TABLE-A AS A
WHERE EXISTS(
SELECT * FROM TABLE-B AS B /* SELECT 1 の方がいいかも */
WHERE A.MANDT = B.MANDT /* 適当な結合条件を記載 */
AND A.伝票番号 = B.伝票番号 /* 適当な結合条件を記載 */
AND A.伝票明細 = B.伝票明細 /* 適当な結合条件を記載 */
AND B.MANDT = 'クライアント' /* テーブルBの抽出条件 */
AND B.伝票番号 = '伝票番号' /* テーブルBの抽出条件 */
)
AND A.適当な項目 = 'XXXXX' /* テーブルAの抽出条件 */
特定項目で集約し、件数を調べる
SELECT 項目A, 項目B, 項目C, count(*) /* 項目A,B,Cで集約する */
FROM TABLE-T
WHERE
XXXXX
AND XXXXX
GROUP BY 項目A, 項目B, 項目C /* 集約するキー項目を列挙 */
HAVING COUNT(*) >= 2 /* 2レコード以上ある場合、出力する */
項目A、B、Cを合計し、その合計が◯◯以上のレコードを抽出
SELECT
項目A+項目B+項目C, /* 項目A,B,Cの合計 */
項目A,
項目B,
項目C,
FROM TABLE-T
WHERE
項目A+項目B+項目C >= 100 /* 項目A,B,Cの合計が100以上を抽出 */
SQLのテンプレート
特定の品目を構成品に持っている品目を調べる
SELECT
MAST.MATNR /*品目*/
,MAST.WERKS /*プラント*/
,MAST.STLAN /*用途*/
,MAST.STLAL /*代替BOM*/
,STPO.STLNR /*BOM*/
,STPO.IDNRK /*構成品目*/
FROM
STPO
INNER JOIN MAST
ON MAST.MANDT = STPO.MANDT
AND MAST.STLNR = STPO.STLNR
WHERE
STPO.MANDT = '100' /*ここにクライアントを入れる*/
AND STPO.IDNRK = 'A123456789' /*ここに構成品目を入れる*/
品目の構成品を調べる
SELECT
MAST.MATNR /*品目*/
,MAST.WERKS /*プラント*/
,MAST.STLAN /*用途*/
,MAST.STLAL /*代替BOM*/
,STPO.STLNR /*BOM*/
,STPO.IDNRK /*構成品目*/
FROM
STPO
INNER JOIN MAST
ON MAST.MANDT = STPO.MANDT
AND MAST.STLNR = STPO.STLNR
AND MAST.MATNR = 'A123456789' /*ここに品目を入れる*/
WHERE
STPO.MANDT = '100' /*ここにクライアントを入れる*/
品目マスタの結合(MARC、MARA、MVKE、MBEWの結合)
SELECT
MARC.*,
MARA.*,
MVKE.*,
MBEW.* /* 必要に応じて項目を選定 */
FROM MARC
INNER JOIN MARA
ON MARA.MANDT = MARC.MANDT
AND MARA.MATNR = MARC.MATNR
INNER JOIN MVKE
ON MVKE.MANDT = MARC.MANDT
AND MVKE.MATNR = MARC.MATNR
INNER JOIN MBEW
ON MBEW.MANDT = MARC.MANDT
AND MBEW.MATNR = MARC.MATNR
AND MBEW.BWKEY = MARC.WERKS
WHERE
MARC.MANDT = '100' /* ここにクライアントを入れる */
AND MARC.MATNR = 'A123456789' /* ここに構成品目を入れる */
品目の標準工数を取得する
SELECT * FROM PLPO /* タスクリスト – 作業/活動 */
INNER JOIN PLAS /* タスクリスト – 作業/活動の選択 */
ON PLAS.MANDT = PLPO.MANDT
AND PLAS.PLNTY = PLPO.PLNTY
AND PLAS.PLNNR = PLPO.PLNNR
AND PLAS.PLNKN = PLPO.PLNKN
AND PLAS.LOEKZ = ''
INNER JOIN PLKO /* 業務一覧 - ヘッダ */
ON PLKO.MANDT = PLPO.MANDT
AND PLKO.PLNTY = PLPO.PLNTY
AND PLKO.PLNNR = PLPO.PLNNR
AND PLKO.PLNAL = PLAS.PLNAL /* グループカウンタ */
AND PLKO.LOEKZ = ''
AND PLKO.PLNTY = 'N' /* タスクリストタイプ=[N]作業手順 */
AND PLKO.VERWE = '1' /* タスクリスト用途。適宜変える */
AND PLKO.STATU = 4 /* リリース済 */
INNER JOIN MAPL /* 品目に対するタスクリスト割当 */
ON MAPL.MANDT = PLPO.MANDT
AND MAPL.PLNTY = PLPO.PLNTY
AND MAPL.PLNNR = PLPO.PLNNR
AND MAPL.PLNAL = PLKO.PLNAL
AND MAPL.LOEKZ = ''
AND MAPL.MATNR IN ('品目コード') /* 適宜変える */
AND MAPL.WERKS = 'プラントコード' /* 適宜変える */
WHERE
PLPO.MANDT = '100'
AND PLPO.LOEKZ = ''
参考
▼プログラム実行時のメモリ消費を調べる方法
プログラム実行時のメモリ消費を調べる方法
プログラム実行時のメモリ消費を調べる方法
▼特定の品目を構成品に持っている品目を調べたい
特定の品目を構成品に持っている品目を調べたい/品目を構成品を一覧出力したい
特定の品目を構成品に持っている品目を調べたい/品目を構成品を一覧出力したい
▼How to run SQL Queries Directly on SAP Database
How to run SQL Queries Directly on SAP Database
Hi, If you ever wanted to write SQL queries to read/analyze data from SAP tables, then this post will be very useful for you. To run SQL queries directly, you...
▼SQL editor for SAP: the missing piece from the ABAP development workbench
SQL editor for SAP: the missing piece from the ABAP development workbench
コメント