0

我想知道在以下情况下获取数据的有效方法。

有两个表说 Table1 和 Table2 有两个公共字段说contrypincode和其他表“Table3”具有前两个表(DNO,MPNO)的关键字段。

这是一个小故障,在 table3 数据中,如果它有 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

1

伪代码:

选择查询:

  1. 从 table3 中选择 * 到 it_table3。

  2. 选择 * from table1 FOR ALL ENTRIES IN it_table3 INTO it_table1 WHERE dno = table3-dno。

  3. 从 table2 中选择 * FOR ALL ENTRIES IN it_table3 INTO it_table2 WHERE mpno = table3-mpno。

  4. 在内部表 3 处循环并构建最终表。在 it_table3 循环到 wa_table3。

    IF wa_table3-dno IS NOT INITIAL.
    READ it_table1 where dno = wa_table3-dno.
    ELSE.
    READ it_table2 where mpno = wa_table3-mpno.
    ENDIF.
    
    ENDLOOP.
    

希望这是您希望找到的答案!

于 2015-11-22T14:16:51.723 回答
0

构建高效选择将需要有关选择屏幕中必填字段的信息,以及所有 3 个表的所谓生产规模。但是,如果没有这些信息,我们假设table1table2是引用表,而 table3 是事务表,因为onr可以从它们的结构中假设。以以下方式构建选择是明智的:

  1. 从参考表中选择数据。正如您所说,字段 DNO/MPNO 是互斥的,那么两个参考表中都不会出现国家/地区/密码对的命中,因此 JOIN 在这里没用。但是,我们可以在单个 itab 中合并 2 个结果集,而不会违反任何约束。

    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 回答