2013 Oct 29 3:45 PM
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.
2013 Oct 30 5:36 AM
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
2013 Oct 30 5:48 AM
2013 Oct 30 6:08 AM
please provide me not that particular records , like that i have so many records.
please logic in generic way.
2013 Oct 30 6:16 AM
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
2013 Oct 30 6:51 AM
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
2013 Oct 30 6:37 AM
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