03-06-2007 7:46 PM
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
03-06-2007 8:02 PM
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
03-06-2007 7:51 PM
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
03-06-2007 7:52 PM
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
03-06-2007 7:58 PM
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.
03-06-2007 8:02 PM
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
03-12-2007 5:30 PM