Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

join two internal tables

Former Member
0 Likes
15,220

hai,

I have two internal tables i want to join them.

suppose itab1 with fields material & product_hierarchy. and another one is itab2 with fields product_hierarchy, matkl and so 0n.

now i want join them display into alv grid .

please message .

thanks u

1 ACCEPTED SOLUTION
Read only

Former Member
6,994

Most efficient method assuming itab2 has much fewer entries than itab1.


sort itab2 by prodh.
loop at itab1.
  clear itab2.
  read table itab2 with key prodh = itab1-prodh using binary search.
* if sy-subrc eq 0.  " Add this line if you want an inner join
  itab3-matnr = itab1-matnr.
  itab3-prodh = itab1-prodh.
  itab3-matkl = itab3-matkl.
  " etc.
  append itab3.
* endif. " For inner join
endloop. 

Use itab3 in your ALV.

11 REPLIES 11
Read only

Former Member
0 Likes
6,994

Take a help with this code.

sort itab1 itab2 by product_hierarchy.

loop at itab1.

read table itab2 with key product_hierarchy = itab1-product_hierarchy.

if sy-subrc = 0.

join

endif.

endloop.

Amit.

Read only

Former Member
0 Likes
6,994

Hi,

Use LOOP and READ TABLE statements to acheive your functionality.

Shruthi

Read only

Former Member
0 Likes
6,994

hi,

say u have an internal table itab1 and itab2. itab3 has all fields that u want to display using alv.

loop at itab1.

read table itab2 with key field = itab1-field.

if sy-subrc = 0.

itab3 ---> populate itab3 here

endif.

endloop.

read will return only one record. if u have more than 1 mathcing record use LOOP instead of READ.

regards,

madhu

Read only

Former Member
0 Likes
6,994

hiee....

you can use nested loop.

loop at itab1.

loop at itab2 where field1 = itab1-field1.

endloop.

endloop.

aur read is the best option.

loop at itab1.

read table itab2 with key field1 = itab1-field1.

endloop.

each record itab1 will be checked against record of itab2 for field1.you can try this.

Read only

Former Member
0 Likes
6,994

Hi,

As mentioned you can do this as follows :

Loop at itab1.

read table itab2 with key product_hirarchy = itab1-product-hirarchy.

if sy-subrc is initial.

move-corresponding itab1 to itab3.

move-corresponding itab2 to itab3.

append itab3.

endif.

clear : itab1, itab2.

endif.

endloop.

    • itab3 is a concolidated table of itab 1 and itab2.

Hope this helps!!!

Regards,

Lalit Kabra

PS : reward if useful!!!

Read only

0 Likes
6,994

APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.

Read only

Former Member
0 Likes
6,994

Hi,

In this case you can do one thing decalre a structure where you can have keep the fields tht u want to join use this code hope it helps you are gives u an idea...

Data: Begin of ITAB occurs 0,

ID like ZPER-ID,

NAME like ZPER-NAME,

CLASS like ZOFF-CLASS,

SPORTS like ZSPORTS-SPORTS,

END of ITAB.

select AID ANAME BCLASS FROM ZPER AS A INNER JOIN ZOFF AS B ON AID = B-ID INNER JOIN ZSPORTS AS C ON AID = CID INTO TABLE ITAB.

WHERE A~AGE > 21 " IF YOU ARE HAVING ANY CONDITION ELSE IGNORE THIS LINE"

LOOP AT ITAB.

WRITE:/ ITAB.

ENDLOOP.

Here i have joined 3 internal tables check it out any issue revery me back.

thks

Read only

Former Member
6,995

Most efficient method assuming itab2 has much fewer entries than itab1.


sort itab2 by prodh.
loop at itab1.
  clear itab2.
  read table itab2 with key prodh = itab1-prodh using binary search.
* if sy-subrc eq 0.  " Add this line if you want an inner join
  itab3-matnr = itab1-matnr.
  itab3-prodh = itab1-prodh.
  itab3-matkl = itab3-matkl.
  " etc.
  append itab3.
* endif. " For inner join
endloop. 

Use itab3 in your ALV.

Read only

0 Likes
6,994

hai ,

prevoius answers not getting.

so i am clear givig the program.

<<<<<<<<<<<<<<<<<<<<<<<<<<

TABLES: MARA.

TYPE-POOLS : SLIS.

TYPES : BEGIN OF TY,

MATNR TYPE MARA-MATNR,

PRDHA TYPE MARA-PRDHA,

END OF TY.

DATA : WA TYPE TY,

ITAB TYPE TABLE OF TY.

SELECT-OPTIONS : P_MATNR FOR MARA-MATNR.

SELECT MATNR PRDHA FROM MARA INTO TABLE ITAB WHERE MATNR IN P_MATNR.

DATA : WA_INFO TYPE BAPIMAT_PRODH,

ITAB_INFO TYPE TABLE OF BAPIMAT_PRODH.

LOOP AT ITAB INTO WA.

CALL FUNCTION 'BAPI_MATERIAL_GET_PRODUCTHIER'

EXPORTING

HIERARCHY_TYPE = 0

PRODUCT_HIERARCHY = WA-PRDHA

  • SALES_ORGANIZATION =

  • DISTRIBUTION_CHANNEL =

  • READ_REFERENCE = ' '

  • IMPORTING

  • RETURN =

TABLES

NODE_LIST = ITAB_INFO.

  • NODE_REFERENCE_LIST =

ENDLOOP.

DATA : WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,

GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

PERFORM POPULATE.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

  • I_CALLBACK_PROGRAM = ' '

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • I_CALLBACK_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE =

  • I_GRID_SETTINGS =

  • IS_LAYOUT =

IT_FIELDCAT = GT_FIELDCAT

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_HTML_HEIGHT_TOP = 0

  • I_HTML_HEIGHT_END = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • IR_SALV_FULLSCREEN_ADAPTER =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB = ITAB_INFO.

FORM POPULATE .

WA_FIELDCAT-FIELDNAME = 'PROD_HIER'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'PROD_HIER'.

WA_FIELDCAT-reptext_ddic = 'PRODUCT HIERARCHY'.

wa_FIELDCAT-EMPHASIZE = 'C410'.

WA_FIELDCAT-key = '5'.

WA_FIELDCAT-OUTPUTLEN = '25'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'PARENT_PROD_HIER'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'PARENT_PROD_HIER'.

WA_FIELDCAT-reptext_ddic = 'PARENT HIERARCHY'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

WA_FIELDCAT-OUTPUTLEN = '25'.

WA_FIELDCAT-key = '5'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'BROTHER_PROD_HIER'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'BROTHER_PROD_HIER'.

WA_FIELDCAT-reptext_ddic = 'BROTHER_PROD_HIER'.

WA_FIELDCAT-OUTPUTLEN = '25'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

  • WA_FIELDCAT-key = '5'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'NODE_LEVEL'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'NODE_LEVEL'.

WA_FIELDCAT-reptext_ddic = 'NODE LEVEL'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

  • WA_FIELDCAT-key = '5'.

WA_FIELDCAT-OUTPUTLEN = '2O'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'LANGU'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'LANGU'.

WA_FIELDCAT-reptext_ddic = 'LANGU'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

  • WA_FIELDCAT-key = '5'.

WA_FIELDCAT-OUTPUTLEN = '10'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'LANGU_ISO'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'LANGU_ISO'.

WA_FIELDCAT-reptext_ddic = 'LANGU_ISO'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

  • WA_FIELDCAT-key = '5'.

WA_FIELDCAT-OUTPUTLEN = '20'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'NODE_TEXT'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'NODE_TEXT'.

WA_FIELDCAT-reptext_ddic = 'NODE_TEXT'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

  • WA_FIELDCAT-key = '5'.

WA_FIELDCAT-OUTPUTLEN = '20'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'TEXT'.

WA_FIELDCAT-TABNAME = 'ITAB_INFO'.

WA_FIELDCAT-REF_FIELDNAME = 'TEXT'.

WA_FIELDCAT-reptext_ddic = 'TEXT'.

  • wa_FIELDCAT-EMPHASIZE = 'C410'.

  • WA_FIELDCAT-key = '5'.

WA_FIELDCAT-OUTPUTLEN = '25'.

APPEND WA_FIELDCAT TO GT_FIELDCAT.

CLEAR WA_FIELDCAT.

ENDFORM. " POPULATE

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

in this we want o/p matnr, prdha, product_hierarchy ..... etc.

thanks u.

Read only

0 Likes
6,994

HI Gert ,

             Nice example,i have the same situtation here,but here i have to join three tables.,let say

  itab1,itab2 and itab3. first i need to join itab1 and itab2 and then left outer join to itab3.

consider itab1 as header table nd itab2 and itab3 are item tables.please give me the sample code .

thankq.

Read only

0 Likes
6,994

Great answer and form! I totally don't understand why people writing here don't use the "code" option like you ?! It's so simple and the code reads a lot better!

Regards Paweł