Application Development 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: 

how to write select within select in ABAP

Former Member
0 Kudos

Hi Guys

I want to write a select statement in ABAP to select from 2 tables below is my code I want to write select within select statment in --->A and replace with ---> B

FORM sales_production_order USING p_vbeln TYPE vbeln_va

CHANGING p_aufnr TYPE aufnr

p_rtcod TYPE sysubrc.

CLEAR: p_rtcod,

p_aufnr.

              • A *******

SELECT aufnr FROM aufk INTO p_aufnr UP TO 1 ROWS

WHERE kdauf EQ p_vbeln .

                  • B *******

SELECT kdauf from aufk into p_aufnr UP TO 1 ROWS

WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ p_vbeln) .

ENDSELECT.

p_rtcod = sy-subrc.

ENDFORM. " sales

T

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Eslam,

In select statements, ENDSELECT must be added when single line returned without the addition 'SINGLE'.

The innner query in your code, returns a single record but with the addition 'UP TO 1 ROWS'. The outer query also like this only. But the outer query ended with 'ENDSELECT', not for inner query.

Else you can add 'SINGLE' keyword.



  SELECT aufnr FROM aufk INTO p_aufnr UP TO 1 ROWS
    WHERE kdauf EQ '10' .

    SELECT SINGLE kdauf from aufk into p_aufnr
    WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ p_vbeln) .

  ENDSELECT.



  SELECT aufnr FROM aufk INTO p_aufnr UP TO 1 ROWS
    WHERE kdauf EQ '10' .

***** It assigns Nth record's KDAUF to p_aufnr provided N records satisfy the condition.
    SELECT  kdauf from aufk into p_aufnr UPTO 1 ROWS
    WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ 'p_vbeln) .
    ENDSELECT.

  ENDSELECT.

Regards,

R.Nagarajan.

6 REPLIES 6

Former Member
0 Kudos

Hi Eslam,

In select statements, ENDSELECT must be added when single line returned without the addition 'SINGLE'.

The innner query in your code, returns a single record but with the addition 'UP TO 1 ROWS'. The outer query also like this only. But the outer query ended with 'ENDSELECT', not for inner query.

Else you can add 'SINGLE' keyword.



  SELECT aufnr FROM aufk INTO p_aufnr UP TO 1 ROWS
    WHERE kdauf EQ '10' .

    SELECT SINGLE kdauf from aufk into p_aufnr
    WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ p_vbeln) .

  ENDSELECT.



  SELECT aufnr FROM aufk INTO p_aufnr UP TO 1 ROWS
    WHERE kdauf EQ '10' .

***** It assigns Nth record's KDAUF to p_aufnr provided N records satisfy the condition.
    SELECT  kdauf from aufk into p_aufnr UPTO 1 ROWS
    WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ 'p_vbeln) .
    ENDSELECT.

  ENDSELECT.

Regards,

R.Nagarajan.

Former Member
0 Kudos

Hi Natrajan

Thanks for your answer but this statement is giving error as unexpected end of condition after 'p_vbeln Error is comming

FORM sales_production_order USING p_vbeln TYPE vbeln_va

CHANGING p_aufnr TYPE aufnr

p_rtcod TYPE sysubrc.

CLEAR: p_rtcod,

p_aufnr.

  • SELECT single aufnr FROM aufk INTO p_aufnr

  • WHERE kdauf EQ p_vbeln.

SELECT SINGLE kdauf from aufk into p_aufnr

WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ p_vbeln) .

p_rtcod = sy-subrc.

ENDFORM. " sales_production_order

Thanks

Piroz

0 Kudos

Hi Eslam,

Just give a space between 'p_vbeln' and ')'.

Now it's working?

Regards,

R.Nagarajan.

Former Member
0 Kudos

Hi Nagarajan

Thanks it works I forget to put ' at the end

SELECT SINGLE kdauf from aufk into p_aufnr

WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ 'p_vbeln') .

Thread Closed

Regards

Piroz

0 Kudos

Hi Eslam,

Don't put p_vbeln within single quotes.

Then it will not check for the value stored in p_vbeln.

Regards,

R.Nagarajan.

Former Member
0 Kudos

Hi Nagarajan

SELECT SINGLE kdauf from aufk into p_aufnr

WHERE KDAUF IN ( SELECT VBELN FROM VBAP where vbeln EQ ' p_vbeln ' ) .

Will this be ok it is compiling now