4

サブクエリが変数と一致するテーブルから行を取得しようとしています。ただし、WHERE 句では、選択したテーブルのフィールドを定数、変数、またはサブクエリと比較することしかできないようです。

私は次のようなものを書くことを期待しています:

DATA(lv_expected_lines) = 5.
SELECT partner contract_account
INTO TABLE lt_bp_ca
FROM table1 AS tab1
WHERE lv_expected_lines = (
    SELECT COUNT(*)
    FROM table2
    WHERE partner          = tab1~partner
    AND   contract_account = tab1~contract_account ).

しかし、明らかに、この選択はローカル変数をフィールド名として扱い、「ランタイムまで不明な列名「lv_expected_lines」、フィールドリストを指定できません」というエラーが表示されます。

しかし、標準 SQL では、これは完全に可能です。

SELECT PARTNER, CONTRACT_ACCOUNT
FROM TABLE1 AS TAB1
WHERE 5 = (
    SELECT COUNT(*)
    FROM TABLE2
    WHERE PARTNER          = TAB1.PARTNER
    AND   CONTRACT_ACCOUNT = TAB1.CONTRACT_ACCOUNT );

では、RSQL / Open SQL でこのロジックを複製するにはどうすればよいでしょうか?

仕方がない場合は、おそらくネイティブ SQL を作成するだけで済みます。

4

3 に答える 3

-1

ABAP では、NATIVE SQL のようにクエリを実行する方法はありません。NATIVE SQL を使用しないことをお勧めします。代わりに、SELECT/ENDSELECT ステートメントを試してみてください。

DATA: ls_table1 type table1,
      lt_table1 type table of table1,
      lv_count  type i.

SELECT PARTNER, CONTRACT_ACCOUNT
INTO ls_table1
FROM TABLE1.

      SELECT COUNT(*)
        INTO lv_count
        FROM TABLE2
       WHERE PARTNER          = TAB1.PARTNER
        AND  CONTRACT_ACCOUNT = TAB1.CONTRACT_ACCOUNT.

  CHECK lv_count EQ 5.
  APPEND ls_table1 TO lt_table1.

ENDSELECT

ここでは、選択した table2 で count が 5 に等しい行のみを ls_table1 に追加します。

それが役に立てば幸い。

于 2015-02-20T23:13:58.877 に答える