0

以下の場合の効率的なデータ取得方法を教えていただきたいです。

表 1 と表 2 という 2 つのテーブルがあり、 contrypincodeという 2 つの共通フィールドがあり、他のテーブル「Table3」には最初の 2 つのテーブル (DNO、MPNO) のキー フィールドがあります。

ここに小さな不具合があります。表 3 のデータでは、DNO がある場合、MPNO はありません。

そのため、選択画面 (Pic no2) で何かを入力すると、結果は次のようになります。

**MFID  |  DNO        |  MPNO     | COUNTRY | PINCODE**
----------
00001   |   10011     |  novalue  | IN      | 4444
00002   |   Novalue   |  1200     | IN      | 5555
00003   |   300       |  novalue  | US      | 9999

(DNO が MPNO を提示しない場合、その逆も同様です)

鮮明な画像の写真をご覧ください:-)

テーブル関係: テーブル関係

オプションを選択した選択画面

オプションを選択できる選択画面

コードは長くしないでください。

4

2 に答える 2

0

効率的な選択を構築するには、選択画面の必須フィールドに関する情報と、3 つのテーブルすべての推定生産サイズに関する情報が必要になります。ただし、この情報がない場合は、テーブル 1 とテーブル 2が参照テーブルであり、テーブル3がトランザクション テーブルであると仮定します。onrはそれらの構造から推測できます。次の方法で選択を構築することは賢明です。

  1. 参照テーブルからのデータの選択。あなたが言ったように、フィールド DNO/MPNO は相互に排他的であり、両方の参照テーブルに国/ピンコードのペアのヒットがないため、ここでは JOIN は役に立ちません。ただし、制約に違反することなく、2 つの結果セットを 1 つの itab にマージできます。

    TYPES: BEGIN OF tt_result,
             dno     TYPE table1-dno,
             mpno    TYPE table2-mpno,
             country TYPE table1-country,
             pincode TYPE table1-pincode,
            ...other field from table3
           END OF tt_result.
    
    DATA: itab_result TYPE tt_result.
    
    SELECT dno
      FROM table1
      INTO CORRESPONDING FIELDS OF TABLE itab_result
     WHERE pincode IN so_pincode
       AND country IN so_country.
    
    SELECT mpno
      FROM table2
      APPENDING CORRESPONDING FIELDS OF TABLE itab_result
     WHERE pincode IN so_pincode
       AND country IN so_country.
    
  2. FOR ALL ENTRIES の追加により、FOR ALL ENTRIES 句と INTO 句で同じテーブルを指定できるため、DNO/MPNO キーによって、存在しない table3 データで結果テーブルを埋めることができます。

    SELECT *
      FROM table3
      INTO CORRESPONDING FIELDS OF TABLE itab_result
       FOR ALL ENTRIES IN itab_result
        ON itab_result~dno = itab3~dno
       AND itab_result_mpno = itab3~mpno.
    
于 2015-12-28T15:10:13.623 に答える