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: 

select only if input parameters is not initial

Former Member
0 Kudos

Hi,

What i want to do in the code below is to select pernr into wa_pernr but it is not sure that the input fields (I_BUKRS. I_YYDEPT etc.) has a value. So I just want to do include them in the selection if they are not initial.

How do i do this?

SELECT PERNR INTO WA_PERNR
FROM PA0001

WHERE BUKRS EQ I_BUKRS
<i> AND YYDEPT EQ I_YYDEPT
 AND BEGDA GE I_BEGDA
 AND ENDDA LE I_ENDDA.</i>

APPEND WA_PERNR TO IT_PERNR.

SORT IT_PERNR BY PERNR.
DELETE ADJACENT DUPLICATES FROM IT_PERNR COMPARING PERNR.

ENDSELECT.

Best Regards

Claes

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

You can also build a range for the BUKRS and YYDEPT.

Ex..

RANGES: R_BUKRS FOR T001-BUKRS.

IF NOT I_BUKRS IS INITIAL.

R_BUKRS-SIGN = 'I'.

R_BUKRS-OPTION = 'EQ'.

R_BUKRS-LOW = I_BUKRS.

APPEND R_BUKRS.

ENDIF.

Then in your SQL you can use IN R_BUKRS.

SELECT PERNR INTO WA_PERNR

FROM PA0001

WHERE BUKRS <b>IN R_BUKRS</b>

....

If the value is given it will filter based on that..Otherwise it will get for all the company codes..

Thanks,

Naren

5 REPLIES 5

Former Member
0 Kudos

Hi Claes,

Just check the conditions prior to SELECT statement

<b>IF I_BUKRS IS NOT INITIAL AND I_YYDEPT IS NOT INITIAL.</b>

SELECT PERNR INTO WA_PERNR

FROM PA0001

WHERE BUKRS EQ I_BUKRS

AND YYDEPT EQ I_YYDEPT

AND BEGDA GE I_BEGDA

AND ENDDA LE I_ENDDA.

APPEND WA_PERNR TO IT_PERNR.

SORT IT_PERNR BY PERNR.

DELETE ADJACENT DUPLICATES FROM IT_PERNR COMPARING PERNR.

ENDSELECT.

<b>ENDIF.</b>

Thanks,

Vinay

ferry_lianto
Active Contributor
0 Kudos

Hi,

Please try this.


CHECK NOT I_BUKRS IS INITIAL AND 
      NOT I_YYDEPT IS INITIAL.

SELECT PERNR INTO WA_PERNR
FROM PA0001
 
WHERE BUKRS EQ I_BUKRS
 AND YYDEPT EQ I_YYDEPT
 AND BEGDA GE I_BEGDA
 AND ENDDA LE I_ENDDA.
 
APPEND WA_PERNR TO IT_PERNR.
 
SORT IT_PERNR BY PERNR.
DELETE ADJACENT DUPLICATES FROM IT_PERNR COMPARING PERNR.
 
ENDSELECT.

Regards,

Ferry Lianto

Former Member
0 Kudos

I will do something like this using a dynamic WHERE clause.


PARAMETER: p_matnr LIKE mara-matnr,
           p_mtart LIKE mara-mtart,
           p_matkl LIKE mara-matkl.

DATA: imara LIKE mara OCCURS 0 WITH HEADER LINE,
      itab(100) OCCURS 0 WITH HEADER LINE.

IF p_matnr IS NOT INITIAL.
  MOVE 'MATNR = P_MATNR' TO itab.
  APPEND itab.
ENDIF.

IF p_mtart IS NOT INITIAL.
  MOVE 'AND MTART = P_MTART' TO itab.
  APPEND itab.
ENDIF.

IF p_matkl IS NOT INITIAL.
  MOVE 'AND MATKL = P_MATKL' TO itab.
  APPEND itab.
ENDIF.

SELECT * FROM mara UP TO 10 ROWS
         INTO TABLE imara
        WHERE (itab).

LOOP AT imara.
  WRITE:/ imara-matnr.
ENDLOOP.

Former Member
0 Kudos

Hi,

You can also build a range for the BUKRS and YYDEPT.

Ex..

RANGES: R_BUKRS FOR T001-BUKRS.

IF NOT I_BUKRS IS INITIAL.

R_BUKRS-SIGN = 'I'.

R_BUKRS-OPTION = 'EQ'.

R_BUKRS-LOW = I_BUKRS.

APPEND R_BUKRS.

ENDIF.

Then in your SQL you can use IN R_BUKRS.

SELECT PERNR INTO WA_PERNR

FROM PA0001

WHERE BUKRS <b>IN R_BUKRS</b>

....

If the value is given it will filter based on that..Otherwise it will get for all the company codes..

Thanks,

Naren

0 Kudos

Thanks.

/C