この記事を読むメリット
Eclipse の ADT で、データプレビューを開いてテーブルの中身を表示・絞り込みする方法が分かる
SQL コンソールで SELECT 文を流し、INNER JOIN での結合や GROUP BY での集計をする方法が分かる
「Max. Rows」「Number of Entries」「Show Log」の使い分けと、よく出るエラーの直し方が分かる
テーブルの中身を確かめるとき、SE16N では 2 つのテーブルを結合したり、件数を集計したりするのに手間がかかります。
Eclipse に ABAP Development Tools(ADT)を入れると、データプレビュー でテーブルの中身を表示でき、SQL コンソール で SELECT 文をそのまま流せます。レポートを作らずに、結合や集計の結果をすぐに見られます。
この記事では、次の操作を画面を 1 つずつ追って解説します。
データプレビューで テーブルの中身を表示し、絞り込む手順
SQL コンソールで SELECT 文を流し、結合・集計する手順
博士!SE16N だと、2 つのテーブルをつないだり件数を数えたりするのが大変なんです…
うむ、Eclipse の ADT なら、SQL コンソールで SELECT 文をそのまま流せるぞい。結合も集計も一発じゃ!
この記事のポイント
データプレビューと SQL コンソールの概要
データプレビューと SQL コンソールとは
データプレビュー (Data Preview)は、テーブルやビュー、CDS ビューの中身を表として表示する機能です。
画面で列や条件を選ぶと、裏で ABAP SQL の SELECT 文が組み立てられて実行されます。
既定では、先頭の 100 件が表示されます。表示する件数の上限は「Max. Rows」で変えられ、100,000 件まで指定できます。
SQL コンソール (SQL Console)は、ABAP SQL の SELECT 文を自分で書いて実行する画面です。
書けるのは新しい ABAP SQL の構文だけ です。列はカンマで区切り、テーブルの別名と列は ~ でつなぎます(例: c~bukrs)。
c~bukrs の c って、テーブルに付けたあだ名みたいなものですか?
そのとおりじゃ!FROM t001 AS c のように付けた別名じゃよ。結合の例では、T005T にも t を付けて、t~landx のように書くのじゃ。
実務の例
経理部などから、会社コードごとの国名の一覧や、伝票タイプごとの伝票の件数を、すぐに知りたいと頼まれることがあります。
テーブルの中身は、データプレビューで確かめます。テーブルの結合や、伝票タイプごとの件数集計は SQL コンソールで行います。
この記事の操作との対応は、次のとおりです。
データプレビューと SQL コンソールの使い分け
データプレビューで画面から条件を選ぶと SELECT 文が組み立てられ、SQL コンソールでは SELECT 文を直接書いて結果を見る 、という関係です。
データプレビューで絞り込んだ条件は、SQL コンソールでもう一度入力し直すんですか?
その必要はないぞい。データプレビューの「SQL Console」から開けば、その条件の SELECT 文が入った SQL コンソールが開くのじゃ。
2 つの画面の違いは、次のとおりです。
データプレビュー SQL コンソール 開き方 テーブルを開いて Run As → ABAP Application プロジェクトの右クリック → SQL Console、またはデータプレビューの「SQL Console」 条件の指定 「Add Filter」で列と値を選ぶ WHERE 句を書く 結合・項目別集計 できません INNER JOIN・GROUP BY・COUNT などを書けます 件数の上限 「Max. Rows」(既定 100) 「Max. Rows」(既定 100)
データプレビューでテーブルを見る
使うデータ
経理部から「会社コードごとの国名の一覧と、会社コード 1010 の今年度の伝票が伝票タイプごとに何件あるかを、すぐに知りたい」と頼まれた場面を考えます。
この記事では、この依頼を例に操作します。使うデータは次のとおりです。
データ この例の値 使うところ 会社コードのテーブル T001 データプレビューで開き、SQL コンソールでも照会します 国名のテーブル T005T(言語 J の行) T001 と INNER JOIN でつなぎ、日本語の国名を出します 会計伝票ヘッダのテーブル BKPF 伝票タイプ(BLART)ごとの件数を GROUP BY で数えます 会社コード 1010(結合の例では 1010・1710・JZ01) データプレビューの絞り込みと、SELECT 文の WHERE 句に入れます 会計年度 2026 BKPF の件数を数える WHERE 句に入れます
上記の値は、この記事で使った検証環境のものです。ご自分の環境では、会社コードと会計年度を、それぞれの値に読み替えてください。テーブル名は読み替えずに、そのまま使います。
前提条件として、Eclipse に ABAP Development Tools(ADT)を入れ、SAP のシステムにつないだ ABAP プロジェクトが必要です。
あわせて、ADT を使うためのロール(SAP の標準ロールでは SAP_BC_DWB_ABAPDEVELOPER など)と、見るテーブルの表示権限も必要です。
Eclipse と ADT の入れ方、ABAP プロジェクトの作り方は、次の記事の「Eclipse を準備する」で解説しています。
あわせて読みたい
【SAP Fiori】RAPでODataサービスを作る方法
この記事を読むメリット RAP で OData サービスを作る順番(CDS ビュー → サービス定義 → サービスバインディング → 公開)が分かる Eclipse(ADT)の画面で、CDS ビュー・…
1. テーブルを開く
Project Explorer で ABAP プロジェクトを選びます。
メニューの「Navigate」→「Open ABAP Development Object…」を選びます。Ctrl+Shift+A キーでも開けます。
「Open ABAP Development Object」のダイアログが表示されます。
画面の見方
検索欄 : 開くオブジェクトの名前を入れます。
Matching items : 名前に合うオブジェクトの一覧です。テーブルには「(Database Table)」が付きます。
OK : 選んだオブジェクトを開きます。
この例では、T001 と入れ、「T001 (Database Table)」を選んで③「OK」を押します。T001 の定義がエディタに表示されます。
2. データプレビューを開く
T001 の定義を開いたまま、メニューの「Run」→「Run As」→「1 ABAP Application」を選びます(F8 キーでも開けます)。
画面の見方
Run : 実行のメニューです。
Run As : 実行のしかたを選びます。
1 ABAP Application : テーブルでは、データプレビューが開きます。
3. 結果の画面を見る
「Data Preview」のタブに、T001 の中身が表として表示されます。
画面の見方
取り出した件数 : 「100 rows retrieved」は、100 件を取り出して表示していることを表します。
SQL Console : いまの条件の SELECT 文を SQL コンソールで開きます。
Number of Entries : 条件に合う件数を数えます。
Add Filter : 絞り込む列を選びます。
Show Log : 裏で実行した SQL 文の記録を表示します。
Max. Rows : 取り出す件数の上限です。既定は 100 件です。
「100 rows retrieved」って、T001 には 100 件しかないということですか?
そうとは限らんぞい。既定では、先頭の 100 件だけを取り出して表示しておるのじゃ。条件に合う件数をすべて数えるには、「Number of Entries」を使うのじゃよ。
4. 条件で絞り込む
①「Add Filter」を押して、絞り込む列を選びます。この例では BUKRS(会社コード)を選びます。
右に「Filters」が表示されるので、値の欄に 1010 と入れて Enter キーを押します。
画面の見方
Add Filter : 絞り込む列を選ぶボタンです。
Filters : 選んだ列と条件です。「=」の右に値を入れます。
取り出した件数 : 「1 rows retrieved」です。
結果 : 会社コード 1010 の 1 行だけが表示されます。
5. 件数を数える
「Number of Entries」を押すと、「Number of Entries」のダイアログに、条件に合う件数が表示されます。
画面の見方
件数 : 「Number of entries that meet the selection criteria: 1」です。
「Number of Entries」は、「Max. Rows」に関係なく、条件に合う件数をすべて数えます。件数の多いテーブルで、表示しきれない件数を確かめるときに使います。
6. 裏で実行した SQL 文を見る
「Show Log」を押すと、「Data Explorer Log」が表示されます。データプレビューが組み立てて実行した SQL 文が、新しいものほど下に並びます。
画面の見方
Generated SQL : 表を表示したときの SELECT 文です。列が T001~MANDT, T001~BUKRS, … のように並びます。
件数を数えた SQL : 「Number of Entries」で実行した SELECT COUNT( * ) の文です。絞り込みの条件(WHERE BUKRS = '1010')も入っています。
7. 結果をファイルに保存する
結果の表の右上にある保存のアイコンの ▼ を押すと、保存する形式を選べます。
画面の見方
保存のアイコン : 結果をファイルに保存します。
形式 : 「Delimited text file」(区切り文字のテキスト)、「HTML file」、「XML file」、「ABAP value statement text file」から選びます。
SQL コンソールで SELECT 文を流す
1. SQL コンソールを開く
Project Explorer で ABAP プロジェクトを右クリックし、「SQL Console」を選びます。
画面の見方
ABAP プロジェクト : SELECT 文を流すシステムのプロジェクトです。
SQL Console : 何も入っていない SQL コンソールを開きます。
データプレビューの「SQL Console」から開くと、データプレビューで絞り込んだ条件の SELECT 文が入った状態で開きます。
データプレビューで形を作ってから、SQL コンソールで書き足すと楽です。
画面の見方
SQL の欄 : SELECT 文を書きます。データプレビューから開くと、その条件の文が入ります。
結果 : 実行した結果が表示されます。
ログ : 実行した時刻と、成功したか失敗したかが表示されます。
2. SELECT 文を流す
SQL の欄の中身を消して、次の文を入れます。
SELECT bukrs, butxt, land1, waers, ktopl FROM t001 WHERE bukrs = '1010'
「Run」を押します。
画面の見方
SELECT 文 : 列はカンマで区切ります。
Run : 文を実行します。
結果 : SELECT 文で選んだ 5 つの列だけが表示されます。
ログ : 「Query successfully executed」は、実行が成功したことを表します。
3. 2 つのテーブルを結合する
T001 の LAND1 には国のキーが入っています。日本語の国名は、テーブル T005T の該当する言語の行から取ります。
次の文で、2 つのテーブルを INNER JOIN でつなぎ、日本語の国名を並べます。
SELECT c~bukrs, c~butxt, c~land1, t~landx
FROM t001 AS c
INNER JOIN t005t AS t ON t~land1 = c~land1 AND t~spras = 'J'
WHERE c~bukrs IN ('1010','1710','JZ01')
画面の見方
SELECT 文 : AS c・AS t でテーブルに別名を付け、列は c~bukrs のように ~ でつなぎます。T005T は言語ごとに行があるので、t~spras = 'J' で日本語の行だけにします。
取り出した件数 : 3 件です。
結果 : LANDX(国名)に、1010・1710 の行は「ドイツ」、JZ01 の行は「日本」と表示されます。
4. 件数を集計する
次の文で、会社コード 1010 の 2026 年度の会計伝票を、伝票タイプ(BLART)ごとに数えます。
SELECT blart, COUNT(*) AS cnt FROM bkpf
WHERE bukrs = '1010' AND gjahr = '2026'
GROUP BY blart ORDER BY cnt DESCENDING
画面の見方
SELECT 文 : COUNT(*) で件数を数え、GROUP BY blart で伝票タイプごとにまとめます。ORDER BY cnt DESCENDING で件数の多い順に並べます。
取り出した件数 : この例では 22 件(伝票タイプが 22 種類)です。
結果 : SA が 409 件、WE が 271 件と、件数の多い順に並びます。
この例の集計文では、SELECT の列にも blart を入れるのじゃ。入れない文では「Incorrect nesting」のエラーになるぞい。
5. 取り出す件数を決める
「Max. Rows」を 5 にして、もう一度「Run」を押します。
画面の見方
Max. Rows : 取り出す件数の上限です。
取り出した件数 : 「5 rows retrieved」です。
結果 : 件数の多い順の上から 5 件だけが表示されます。
SQL 文の中の件数の指定ではなく、「Max. Rows」で取り出す件数の上限を指定します。 SQL 文の中に件数を書いても、「Max. Rows」の値が使われます。
全体の件数を知りたいときは、結果の上の「Number of Entries」を押します。この例では 22 件と表示されます。
6. 前に流した文を呼び出す
「Run」の右の ▼ を押すと、これまでに流した SELECT 文が新しい順に並びます。
画面の見方
▼ : 履歴とお気に入りのメニューを開きます。
履歴 : 前に流した SELECT 文です。選ぶと、その文が入った SQL コンソールが新しいタブで開きます。
History… など : 「History…」で履歴の一覧を開き、「Clear History」で履歴を消します。よく使う文は「Add To Favorites」でお気に入りに入れておくとよいでしょう。
よくあるつまずき
「The elements in the “SELECT LIST” list must be separated using commas.」と出る
列をカンマで区切っていません。SQL コンソールでは、新しい ABAP SQL の構文だけが使えます。SELECT bukrs butxt ではなく SELECT bukrs, butxt と書くのが正です。
画面の見方
エラーの印 : エラーのある行に赤い印が付きます。
ログ : 「Query execution failed」と、エラーの理由が赤字で表示されます。
「Incorrect nesting: For the statement “CATCH”, there is no open structure introduced by “TRY”.」と出る
この例の集計文では、GROUP BY に書いた列 blart が SELECT の列に入っていないと、このエラーになります。 GROUP BY の列を、SELECT の列にも入れると通ります。
この例の 2 つの文の結果は、次のとおりです。
SELECT 文 結果 SELECT COUNT(*) AS cnt … GROUP BY blart このエラーになる SELECT blart, COUNT(*) AS cnt … GROUP BY blart 通る
エラーの文は SELECT 文と関係なく見えるので、GROUP BY を使った文でこのエラーが出たら、まず SELECT の列を確かめるとよいでしょう。
画面の見方
SELECT 文 : GROUP BY の列 blart が SELECT に入っていません。
ログ : 「Incorrect nesting」のエラーです。
そのほか
2 つの列を比べる条件がエラーになる : 別名を付けずに WHERE bwkey <> werks のように列どうしを比べると、右の列が ABAP の変数とみなされてエラーになります。FROM t001w AS x WHERE x~bwkey <> x~werks のように、別名を付けて ~ でつなぎます。
件数が 100 件で止まる : 「Max. Rows」の既定は 100 件です。 全体の件数は「Number of Entries」で確かめ、表示したい件数に合わせて「Max. Rows」を変えます。
CDS ビューの件数が思ったより少ない : CDS ビューにアクセス制御が付いていると、ユーザの権限で行が絞られ、テーブルを直接見る場合と件数が違うことがあります。 件数を比べるときは、アクセス制御の影響も確かめるとよいでしょう。
データが表示されない・権限のエラーになる : 見るテーブルの表示権限が足りないことがあります。 エラーのメッセージを権限の管理者に伝えて、確かめてもらうとよいでしょう。
まとめ
データプレビューは、テーブルを開いて「Run」→「Run As」→「1 ABAP Application」(F8)で開きます。 「Add Filter」で絞り込み、「Number of Entries」で件数を数え、「Show Log」で裏の SELECT 文を確かめられます。
SQL コンソールは、プロジェクトの右クリック、またはデータプレビューの「SQL Console」で開きます。 新しい ABAP SQL の構文で SELECT 文を書き、「Run」で結果を見ます。INNER JOIN での結合や、GROUP BY・COUNT での集計も書けます。
取り出す件数の上限は「Max. Rows」で指定します。前に流した文は、「Run」の右の ▼ から呼び出せます。
前に流した集計文を使いたいときは、また一から書き直すんですか?
その必要はないぞい。「Run」の右の ▼ の履歴から選べば、その文が入った SQL コンソールが開くのじゃ。書き直すときも、列はカンマで区切る新しい構文で書くのじゃぞ。