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

abap database table data framing in program

Former Member
0 Likes
1,771

Hi,

I have one requirement i have  empid, empname, company.

eg : empid     empname      company.

     123             ravi               abc

      123            ravi                xyz

       123           ravi                efg

--------------------------------------------

123               ravi              abc,xyz,efg---------------------------------------------------------------------------i want to capture like with comma in b/w compnay names in one row.

--> for that collect statement is not possible because empid is not primary key,,primary key another field , if have any code for this please provide me.

6 REPLIES 6
Read only

sivaganesh_krishnan
Contributor
0 Likes
1,679

Hi Mohan,

Check this out,

TYPES:BEGIN OF ty_S,

  empid TYPE i,

  empname TYPE char10,

  company TYPE char50,

  END OF ty_S.

  TYPES:BEGIN OF ty_S1,

  empid TYPE i,

  empname TYPE char10,

  company TYPE char50,

  END OF ty_S1.

  DATA: lt_data TYPE STANDARD TABLE OF ty_s,

        lx_data TYPE ty_S.

  DATA:lt_final TYPE STANDARD TABLE OF ty_S1,

        lx_final TYPE ty_s1.

  data: c_quote  value `,`.

  DATA:v_data TYPE char50,

        vf TYPE i.

  lx_data-empid = 123.

  lx_data-empname = 'ravi'.

  lx_data-company = 'abc'.

  APPEND lx_Data to lt_data.

    lx_data-empid = 123.

  lx_data-empname = 'ravi'.

  lx_data-company = 'xyz'.

  APPEND lx_Data to lt_data.

    lx_data-empid = 123.

  lx_data-empname = 'ravi'.

  lx_data-company = 'efg'.

  APPEND lx_Data to lt_data.



  LOOP at lt_data INTO lx_data.

    if lx_data-empid EQ 123 AND lx_data-empname EQ 'ravi'.

      CONCATENATE    v_data lx_data-company c_quote INTO v_data.

      lx_data-company = v_data.

      if sy-tabix EQ 1.

        APPEND lx_Data to lt_final.

       else.

      modify lt_final FROM lx_data  INDEX 1.

      ENdif.

      ENDIF.

    ENDLOOP.

READ TABLE lt_final INTO lx_final INDEX 1.

    find ALL OCCURRENCES OF ','  in lx_final-company match OFFSET vf.


    if sy-subrc EQ 0.

      WRITE: lx_final-empid,

             lx_final-empname,

             lx_final-company+0(vf).

      ENDIF.

Output:

Hope this Helps,

Sivaganesh

Read only

0 Likes
1,679

thank you,

Read only

Former Member
0 Likes
1,679

please provide me not that particular records , like that i have so many records.

please logic in generic way.

Read only

0 Likes
1,679

Hi-

Try this code should work:

TYPES : BEGIN OF t_itab,

         num TYPE i,

         name TYPE char20,

         comp TYPE char20,

         END OF t_itab.

DATA: BEGIN OF wa_comp,

       num TYPE i,

       name TYPE char20,

       END OF wa_comp.

DATA: itab TYPE STANDARD TABLE OF t_itab,

       itab_final TYPE STANDARD TABLE OF t_itab,

       wa_itab TYPE t_itab,

       wa_itab_temp TYPE t_itab,

       lv_comp TYPE char20.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'ABC'.

wa_itab-comp = 'VEN'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'ABC'.

wa_itab-comp = 'KAT'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'ABC'.

wa_itab-comp = 'AIL'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'DEF'.

wa_itab-comp = 'VEN'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'DEF'.

wa_itab-comp = 'KAT'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'DEF'.

wa_itab-comp = 'AIL'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'GHI'.

wa_itab-comp = 'VEN'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'GHI'.

wa_itab-comp = 'KAT'.

APPEND wa_itab TO itab.

CLEAR: wa_itab.

wa_itab-num = 1.

wa_itab-name = 'GHI'.

wa_itab-comp = 'AIL'.

APPEND wa_itab TO itab.

DATA: lv_index TYPE sy-index,

       lv_count TYPE sy-tabix.

lv_count = lines( itab ).

LOOP AT itab INTO wa_itab.

   IF sy-tabix EQ 1.

     wa_itab_temp = wa_itab.

   ELSE.

     AT NEW name.

       wa_itab_temp-comp = lv_comp.

       APPEND wa_itab_temp TO itab_final.

       wa_itab_temp = wa_itab.

       CLEAR: lv_comp.

     ENDAT.

   ENDIF.

   IF lv_comp IS INITIAL.

     lv_comp = wa_itab-comp.

   ELSE.

     CONCATENATE lv_comp ',' wa_itab-comp INTO lv_comp.

   ENDIF.

   IF lv_count = sy-tabix.

     wa_itab-comp = lv_comp.

     APPEND wa_itab TO itab_final.

   ENDIF.

ENDLOOP.

LOOP AT itab_final INTO wa_itab.

   WRITE: / wa_itab-num, wa_itab-name, wa_itab-comp.

ENDLOOP.

Thanks,

-Venkat

Read only

0 Likes
1,679

HI mohan,

TYPES:BEGIN OF ty_S,

  empid TYPE i,

  empname TYPE char10,

  company TYPE char50,

  END OF ty_S.



  TYPES:BEGIN OF ty_S1,

  empid TYPE i,

  empname TYPE char10,

  company TYPE char50,

  END OF ty_S1.



  DATA: lt_data TYPE STANDARD TABLE OF ty_s,

        lx_data TYPE ty_S.



  DATA:lt_final TYPE STANDARD TABLE OF ty_S1,

        lx_final TYPE ty_s1.

  data: c_quote  value `,`.

  DATA:v_data TYPE char50,

        vf TYPE i,

        lv_id TYPE i.





  lx_data-empid = 123.

  lx_data-empname = 'ravi'.

  lx_data-company = 'abc'.

  APPEND lx_Data to lt_data.



    lx_data-empid = 123.

  lx_data-empname = 'ravi'.

  lx_data-company = 'xyz'.

  APPEND lx_Data to lt_data.



    lx_data-empid = 123.

  lx_data-empname = 'ravi'.

  lx_data-company = 'efg'.

  APPEND lx_Data to lt_data.



      lx_data-empid = 23.

  lx_data-empname = 'ravi'.

  lx_data-company = 'efg'.

  APPEND lx_Data to lt_data.

      lx_data-empid = 23.

  lx_data-empname = 'ravi'.

  lx_data-company = 'abc'.

  APPEND lx_Data to lt_data.



  LOOP at lt_data INTO lx_data.



      if lx_data-empid NE lv_id.

        CLEAR: v_data.



      ENDIF.

      CONCATENATE    v_data lx_data-company c_quote INTO v_data.

      lx_data-company = v_data.

      modify  lt_final FROM lx_data  TRANSPORTING empid empname company WHERE empid EQ lx_data-empid ."where empid EQ lx_Data-empid .

      lv_id = lx_data-empid.

      if sy-subrc <> 0.

        APPEND lx_Data to lt_final.

      endif.



* endif.

    ENDLOOP.



LOOP at lt_final INTO lx_final.

    find ALL OCCURRENCES OF ','  in lx_final-company match OFFSET vf.





    if sy-subrc EQ 0.



      WRITE:/ lx_final-empid,

             lx_final-empname,

             lx_final-company+0(vf).

      ENDIF.

      ENDLOOP.

Regards,

Sivaganesh

Read only

former_member188219
Participant
0 Likes
1,679

hello,

This is my table.

the code is as follows

REPORT  ZTQ.

TABLES : zcapg.

TYPES: begin of ty_cg,

         id TYPE NUMC10,

         DESG TYPE CHAR20,

   END OF ty_cg,

   ty TYPE ty_cg.

   data: lt TYPE STANDARD TABLE OF ty_cg,

         l TYPE STANDARD TABLE OF ty_cg.

   data: wa TYPE ty_cg,

         w  TYPE ty_cg,

         lv TYPE CHAR20.

   PARAMETERS: p_id TYPE zcapg-id.

   SELECT id

          DESG

     FROM zcapg Into TABLE lt

     WHERE id eq p_id.

     LOOP AT lt INTO wa  .

       READ TABLE l INTO w WITH  KEY id = wa-id.

       if sy-subrc ne 0.

         WRITE:wa-id,(2)wa-desg.

         append wa to l.

         CLEAR wa.

         ELSE.

           CONCATENATE ',' wa-DESG INTO lv .

          write : (05)lv .

         endif.

     ENDLOOP.

The o/p is

Hope this helps ur requirement and the field ID is not a primary key in my table

Regards

A.S