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

how to declare variable in inner join

Former Member
0 Likes
2,107

HI,

Present program i s not working ,pleas help me in doing it,

Error is showing in "vbak~ernam+0(1) EQ CB ."

data : begin of itab occurs 0,

kunnr like kna1-kunnr,

matnr like mara-matnr,

end of itab.

data : pvbeln like vbak-vbeln.

data ikna1 like kna1 occurs 0 with header line.

select kunnr from kna1 into table ikna1 up to 10 rows.

constants : CB type c value 'B'.

select mara~matnr into table itab from

( ( mara inner join vbap on maramatnr = vbapmatnr )

inner join vbak on vbapvbeln = vbakvbeln )

for all entries in ikna1

where vbakkunnr = ikna1-kunnr and vbakernam+0(1) EQ CB .

loop at itab.

read table ikna1 with key kunnr = '20'.

itab-kunnr = ikna1-kunnr.

modify itab.

write:/ itab-kunnr,itab-matnr.

endloop.

HI,

Present program i s not working ,pleas help me in doing it,

Error is showing in "vbak~ernam+0(1) EQ CB ."

data : begin of itab occurs 0,

kunnr like kna1-kunnr,

matnr like mara-matnr,

end of itab.

data : pvbeln like vbak-vbeln.

data ikna1 like kna1 occurs 0 with header line.

select kunnr from kna1 into table ikna1 up to 10 rows.

constants : CB type c value 'B'.

select mara~matnr into table itab from

( ( mara inner join vbap on maramatnr = vbapmatnr )

inner join vbak on vbapvbeln = vbakvbeln )

for all entries in ikna1

where vbakkunnr = ikna1-kunnr and vbakernam+0(1) EQ CB .

loop at itab.

read table ikna1 with key kunnr = '20'.

itab-kunnr = ikna1-kunnr.

modify itab.

write:/ itab-kunnr,itab-matnr.

endloop.

10 REPLIES 10
Read only

Former Member
0 Likes
1,336

Hi

i don't think you can put comparison like this "vbak~ernam+0(1) EQ CB " in your select statemnet.

You can better remove this from you select statement and then in loop you can put the check.

Regards

Naresh

Read only

Former Member
0 Likes
1,336

Madhavi,

You cannot use offsets in select statement where conditions. Your select using join should be changed.

Look at the example.

REPORT demo_select_inner_join.

DATA: BEGIN OF wa,
        carrid TYPE spfli-carrid,
        connid TYPE spfli-connid,
        fldate TYPE sflight-fldate,
        bookid TYPE sbook-bookid,
      END OF wa,
      itab LIKE SORTED TABLE OF wa
                WITH UNIQUE KEY carrid connid fldate bookid.

SELECT  p~carrid p~connid f~fldate b~bookid
  INTO  CORRESPONDING FIELDS OF TABLE itab
  FROM  ( ( spfli AS p
            INNER JOIN sflight AS f ON p~carrid = f~carrid AND
                                       p~connid = f~connid    )
            INNER JOIN sbook   AS b ON b~carrid = f~carrid AND
                                       b~connid = f~connid AND
                                       b~fldate = f~fldate     )
  WHERE p~cityfrom = 'FRANKFURT' AND
        p~cityto   = 'NEW YORK'  AND
        f~seatsmax > f~seatsocc.

LOOP AT itab INTO wa.
  AT NEW fldate.
    WRITE: / wa-carrid, wa-connid, wa-fldate.
  ENDAT.
  WRITE / wa-bookid.
ENDLOOP.

Thanks,

Message was edited by: Naren Somen

Message was edited by: Naren Somen

Read only

Former Member
0 Likes
1,336

Madhavi,

You cannot specify the offset of the column from the table, in the SELECT statement.

You will have to select the data and then do a filtering or use a like operator.

Regards,

Ravi

Read only

hymavathi_oruganti
Active Contributor
0 Likes
1,336

hi,

not only with inner join, with any select statement u can compare the expression directly like that.

first u need to store tha in a variable and then proceed.

select mara~matnr into table itab from

( ( mara inner join vbap on maramatnr = vbapmatnr )

inner join vbak on vbapvbeln = vbakvbeln )

for all entries in ikna1

where vbakkunnr = ikna1-kunnr and vbakernam+0(1) EQ CB .

u can write the above like below.

select a~matnr into table itab from

mara as a inner join vbap as b

on amatnr = bmatnr

inner join vbak as c on bvbeln = cvbeln

for all entries in ikna1

where vbak~kunnr = ikna1-kunnr.

loop at itab.

var = itab-ernam+0(1).

if var <> 'CB'.

delete itab.

endif.

endloop.

Read only

christian_wohlfahrt
Active Contributor
0 Likes
1,336

Hi,

just define a range for ERNAM and fill this range with 'B*' -> you can select even much more complex search patterns.

Regards,

Christian

Read only

Former Member
0 Likes
1,336

Hi Varisety,

first wen u say vbak~ernam+0(1), it can hold only one variable..how can u make a comparision with CB...

also, instead of

where vbakkunnr = ikna1-kunnr and vbakernam+0(1) EQ CB .

use this in ur code

where vbakkunnr = ikna1-kunnr and vbakernam like 'CB%'.

hope it helps..

Read only

Former Member
0 Likes
1,336

You can do one more thing,

Declare one more field into internal table itab i.e

DATA : BEGIN OF itab OCCURS 0,

kunnr LIKE kna1-kunnr,

matnr LIKE mara-matnr,

<b>ernam like vbak-ernam,</b>

END OF itab.

in Select statement, select ERNAM also.

And while looping you can give where condition:

<b>LOOP AT itab where ernam+0(1) EQ cb .</b>

Hope you find your solution here.

<b>Reward if helpful</b>

Rgds,

Read only

Former Member
0 Likes
1,336

you cannot use offset in select but you can use it in delete stament.

so--

select mara~matnr into table itab from

( ( mara inner join vbap on maramatnr = vbapmatnr )

inner join vbak on vbapvbeln = vbakvbeln )

for all entries in ikna1

where vbak~kunnr = ikna1-kunnr.

delete itab where ernam+0(1) ne cb.

you dont have to use loop at itab.

Message was edited by: Sharath kumar R

Read only

Former Member
0 Likes
1,336

Hi Madhavi,

The statement vbak~ernam+0(1) cannot be used directly in a where condition.

Write the following select query


select mara~matnr into table itab from
( ( mara inner join vbap on mara~matnr = vbap~matnr )
inner join vbak on vbap~vbeln = vbak~vbeln )
for all entries in ikna1
where vbak~kunnr = ikna1-kunnr 
  and vbak~ernam like 'B%' .

This select will return only vbak~ernam starting with 'B'

Sameena

Read only

Former Member
0 Likes
1,336

Hi,

while u r selecting from databse tables this won't work vbak~ernam+0(1) EQ CB .

correct statement is- vbak~ernam like 'C%' (pls try this now).

***************************************************

-> vbak~ernam+0(1) EQ CB <- This will works in read statement only(if u r reading from table).

***************************************************

Regards,

Ramesh.