SQLを直接実行する方法(SQL Editor、SQLコマンドエディタ)

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

コメント

タイトルとURLをコピーしました