2015-11-21 3 views
0

Я хотел бы знать эффективный способ извлечения данных в следующем случае.Нужен эффективный запрос выбора

Есть две таблицы говорят Table1 и Table2 имеет два общего поля сказать Contry и пинкод и другие таблицы «Таблица3», имеющие ключевые поля первых двух таблиц (DNO, MPNO).

Вот маленький глюк, в Table3 данных, если она оказывает DNO это не будет иметь MPNO

Так что, когда на экране выбора (рис NO2), если использование ввести любую вещь, результат должен быть следующим

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

(как вы можете наблюдать, если ДНО присутствует не MPNO, наоборот)

Пожалуйста, посмотрите на фотографии для четкой картины :-)

Table Relation: Table Relation

Selection screen with select options:

Selection screen with select options

Код не должен быть длинным.

ответ

1

псевдокоде:

Выбрать запросы:

  1. Select * из Table3 в it_table3.

  2. Выберите * из таблицы1 ДЛЯ ВСЕХ ЗАПИСИ В it_table3 INTO it_table1 WHERE dno = table3-dno.

  3. Выберите * из таблицы2 ДЛЯ ВСЕХ ЗАПИСИ В it_table3 INTO it_table2 WHERE mpno = table3-mpno.

  4. Петля на внутренней таблице 3 и построить финальный стол. LOOP на 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. 
    

Надеется, что это был ответ, который вы надеялись найти!

+0

Есть ли добиться этого при помощи INNER JOIN, если возможно, вы можете отправить it..and, что о выборе с помощью СТРАНА ..? –

0

Для создания эффективного выбора потребуется информация об обязательных полях на вашем экране выбора, а также о предполагаемом размере производства всех трех таблиц. Однако без этой информации предположим, что table1 и table2 являются справочными таблицами, а table3 - таблица транзакций, которую onr может принимать из своей структуры. Было бы целесообразно построить выбор следующим образом:

  1. Выбор данных из справочных таблиц.Как вы сказали, поля DNO/MPNO являются взаимоисключающими, тогда не будет хитов country/pincode пара в обеих справочных таблицах, поэтому JOIN здесь бесполезен. Однако мы можем объединить 2 набора результатов в единый 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 въездов и в предложении INTO, так что мы можем заполнить нашу таблицу результатов с отсутствующими данными Table3 по ключу ДНА/MPNO.

    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.