需要有效的选择查询

时间:2015-11-21 11:44:01

标签: sap abap select-query

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

有两个表格,表1和表2有两个共同字段,分别是 contry 密码和其他表"表3"拥有前两个表的关键字段(DNO,MPNO)。

这是一个小故障,在table3数据中,如果它有DNO它就没有MPNO

所以当在选择屏幕(图片2)中如果使用输入任何东西,结果应该如下

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

(你可以观察到DNO是否没有MPNO,反之亦然)

请查看图片以获得清晰的图片: - )

Table RelationTable Relation

Selection screen with select options

Selection screen with select options

代码不应该很长。

2 个答案:

答案 0 :(得分:1)

PSEUDO CODE:

选择查询:

  1. 从table3选择*到it_table3。

  2. 从table1中选择* FOR it_table3 INTO it_table1中的所有参数                      在哪里dno = table3-dno。

  3. 从table2中选择* FOR 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.
    
  5. 希望这是你希望找到的答案!

答案 1 :(得分:0)

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

  1. 从参考表中选择数据。正如你所说的字段DNO / MPNO是互斥的,那么两个参考表中都没有 country / pincode 对的命中,所以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 add允许在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.