‎2008 Jul 25 1:35 AM
Hi gurus,
Can anyone help me how to change the following select statement into inner join?
SELECT aufnr FROM afpo INTO TABLE i_afpo
WHERE projn = l_afpo-projn
AND aufnr IN
( select AUFNR from AUFK WHERE auart = 'NT01' ).
IF sy-subrc = 0.
LOOP AT i_afpo.
SELECT SINGLE aufpl INTO l_aufpl
FROM afko
WHERE aufnr = i_afpo-aufnr.
IF sy-subrc = 0.
SELECT objnr INTO TABLE i_afvc
FROM afvc
WHERE aufpl = l_aufpl.
\[removed by moderator\]
Thanks & Regards.
Edited by: Jan Stallkamp on Jul 25, 2008 11:00 AM
‎2008 Jul 25 3:23 AM
Hi,
SELECT afpo~aufnr
afko~aufpl
afvc~objnr
FROM afpo INNER JOIN afko ON afpoaufnr = afkoaufnr
INNER JOIN afvc ON afkoaufpl = afvcaufpl
INTO TABLE itab WHERE afpo~projn = (your select Condition )
and afpo~aufnr = (your select Condition)..
I would recommend you not using Inner join as this would give you bad performance isues...
Instead use For all Entries.
Regards,
Nikhil
‎2008 Jul 25 4:28 AM
Hi, maybe thi will help you.
SELECT AFPOAUFNR AFVCOBJNR
FROM AFKO
JOIN AFPO
ON AFKOAUFNR = AFPOAUFNR
JOIN AUFK
ON AFKOAUFNR = AUFKAUFNR AND
AUFK~AUART = 'NT01'
JOIN AFVC
ON AFKOAUFPL = AFVCAUFPL
INTO (INTERNAL TABLE)
WHERE AFPOPROJN = L_AFPOPROJN.
LOOP AT (INTERNAL TABLE).
...
*filter internal table for your data needed.
ENDLOOP.
PS:please don't write select statement in loop.because it will effect the processing speed.
‎2008 Jul 25 7:54 AM
for inner join you need to find the primary keys for the tables you want to join then the join statments will work you can do 4 inner joins in one select statments which is recomended
EX:
SELECT VBRK~VBELN AS VBELN
VBRK~VKORG AS VKORG
VBRK~VTWEG AS VTWEG
VBRP~PRODH AS PRODH
VBRK~FKDAT AS FKDAT
SUM( VBRP~FKLMG ) AS FKLMG
SUM( VBRP~NETWR ) AS NETWR
INTO CORRESPONDING FIELDS OF WA_TAB FROM VBRK AS VBRK JOIN VBRP AS VBRP
ON VBRKVBELN = VBRPVBELN
WHERE VBRP~MATNR = WA_TAB-MATNR
AND VBRP~WERKS = WA_TAB-WERKS
AND VBRK~FKDAT BETWEEN S_DATE-LOW AND S_DATE-HIGH
AND VBRK~VKORG IN S_VKORG
AND VBRK~VTWEG IN S_VTWEG
AND VBRK~FKSTO NE 'X'
AND VBRK~FKART EQ 'ZBI1'
AND ( VBRKVBTYP EQ'M' OR VBRKVBTYP EQ 'P' OR VBRKVBTYP EQ 'O' OR VBRKVBTYP EQ '6'
OR VBRK~VBTYP EQ '5' )
GROUP BY VBRKVBELN VBRKVKORG VBRKVTWEG VBRPPRODH VBRKFKDAT VBRPFKLMG.
‎2008 Jul 25 7:56 AM
why u go for inner join ? its better to go for For all entries!
Regards
Sas
\[removed by moderator\]
Edited by: Jan Stallkamp on Jul 25, 2008 11:03 AM
‎2008 Jul 25 8:52 AM
hiii
it is better to use FOR ALL ENTRIES here..if you want to use it then just refer to following code..
SELECT matnr " Material Number
FROM mara
INTO TABLE i_mara
WHERE matnr IN s_matnr.
IF i_mara[] IS NOT INITIAL.
SELECT matnr " Material Number
werks " Plants
prctr " Profit Center
FROM marc
INTO TABLE i_marc
FOR ALL ENTRIES IN i_mara
WHERE matnr = i_mara-matnr
AND werks IN s_werks.
ENDIF. " IF i_mara[] IS NOT INITIAL
i_output = i_marc.
IF i_marc[] IS NOT INITIAL.
SELECT matnr " Material Number
werks " Plants
lgort " Storage Location
FROM mard
INTO TABLE i_mard
FOR ALL ENTRIES IN i_marc
WHERE matnr EQ i_marc-matnr
AND werks EQ i_marc-werks
AND lgort IN s_lgort.
ENDIF. " IF i_mara[] IS NOT INITIALIf it is needed to use inner join then just refer to following example in link..it will solve your problem
http://www.sap-img.com/abap/select-statement-with-inner-join-is-taking-forever.htm
regards
twinkal
‎2008 Jul 25 8:59 AM
Hi
Try the following and check.
SELECT afpo~aufnr INTO TABLE i_afpo FROM AFPO
INNER JOIN AUFK ON AFPOaufnr = AUFKaufnr
WHERE AUFK~auart = 'NT01'.
Hope this would help you.
Murthy
Edited by: Kalyanam Seetha Rama Murthy on Jul 25, 2008 10:00 AM