我想知道在以下情况下获取数据的有效方法。
有两个表格,表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,反之亦然)
请查看图片以获得清晰的图片: - )
Selection screen with select options:
代码不应该很长。
答案 0 :(得分:1)
PSEUDO CODE:
选择查询:
从table3选择*到it_table3。
从table1中选择* FOR it_table3 INTO it_table1中的所有参数 在哪里dno = table3-dno。
从table2中选择* FOR it_table3 INTO it_table2中的所有参数 WHERE mpno = table3-mpno。
在内部表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.
希望这是你希望找到的答案!
答案 1 :(得分:0)
建立高效选择将需要有关选择屏幕中必填字段的信息,以及所有3个表的所谓生产规模。但是,如果没有这些信息,我们假设 table1 和 table2 是参考表, table3 是一个事务表,因为onr可以假设从他们的结构。以下列方式建立选择是明智的:
从参考表中选择数据。正如你所说的字段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.
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.