JOIN-Anweisung

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

JOIN-Anweisung

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hallo liebes ABAPforum-Team,

ich habe vor kurzem meine Tätigkeit als ABAP-Entwickler aufgenommen und bin sehr neu in der Thematik drin.

Könntet Ihr mir bitte bei folgendem Problem behilflich sein:

Ich möchte gerne eine Join-Abfrage durchführen.
Das funktioniert auch soweit. Leider bekomme ich bei der Ausgabe der internen Tabelle die Bezeichnung der Equipments nicht angezeigt.
Also - hier das Coding für die Join-Abfrage:


SELECT
mard~werks
mard~matnr
INTO TABLE pt_equipmt
FROM plfh
JOIN crve_a ON crve_a~objid = plfh~objid
LEFT JOIN mard ON mard~matnr = crve_a~equnr
WHERE plfh~plnnr = arbeitsplan
AND plfh~loekz = space.

Die Equipmentbezeichnung ist in der Tabelle EQKT mit dem Datenelement EQKTU hinterlegt.

Ich weiß leider nicht genau, wie ich die Join-Anweisung so gestalten muss, damit diese bei der Ausgabe über die internen Tabelle dargestellt wird.

Hier die Ausgabetabelle:

In die Spalte Equipment soll die Bezeichnung der zugehörigen Equipment-Nr. erscheinen.


Ich freue mich auf hilfreiche Tipps - Vielen Dank

Ciao - honeyjam

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: JOIN-Anweisung

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
hi honeyjam,

wie wäre es denn mit einem :

Code: Alles auswählen.

    select single eqktu into pt_equipmt-eqktu from eqkt
      where matnr eq pt_equipmt-matnr
      and    spras  eq sy-langu.
was du nach deinem join aufrufst bevor das append pt_equipmt. und das endselect. kommt ?

gruss
tony
<:: XING-Gruppe Tricktresor::>

Re: JOIN-Anweisung

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi Tony,
vielen Dank für die schnelle Nachricht!
Ich habe die Select-Anweisung in mein Coding eingebaut. Musste es auch ein wenig anpassen.
Siehe hier:

SELECT
eqkt~eqktu INTO TABLE pt_equipmt
FROM eqkt
WHERE eqkt~eqktu = equipment.
AND spras EQ sy-langu.

Dies hat leider auch nicht zum gewünschten Erfolg gebracht :-(
Aber ein Versuch war es Wert.

Am elegantesten wäre es, wenn ich die Abfrage direkt in meine Join-Anweisung mit einbauen könnte. So müsste ich zwei Selects daraus basteln. Also ich meine hier in die Join-Anweisung:

SELECT
mard~werks
mard~matnr
INTO TABLE pt_equipmt
FROM plfh
JOIN crve_a ON crve_a~objid = plfh~objid
LEFT JOIN mard ON mard~matnr = crve_a~equnr
WHERE plfh~plnnr = arbeitsplan
AND plfh~loekz = space.

Also hier irgendwie dazwischen...

Vielleicht hast du / ihr noch eine andere Idee?

Freue mich schon auf weitere gute Tipps / Ideen :-)

Ciao - honeyjam

Re: JOIN-Anweisung

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
na dann quick and dirty: nachdem endselect.

Code: Alles auswählen.

    
loop at pt_equipmt.
select single eqktu into pt_equipmt-equipment from eqkt
      where matnr eq pt_equipmt-equipment_nr
      and    spras  eq sy-langu.
modify pt_equipment.
endloop.

Folgende Benutzer bedankten sich beim Autor ratsnus für den Beitrag:
honeyjam

<:: XING-Gruppe Tricktresor::>

Re: JOIN-Anweisung

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi Tony,
werde es ausprobieren - Danke!
Ciao

Re: JOIN-Anweisung

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hallo zusammen,

leider hat dies auch nicht zum Erfolg gebracht :-(
Das Problem liegt in der Join-Anweisung.
Ich muss die Abfrage so codieren, das dies in der Join-Bedinung untergebracht ist.
Bin leider genauso weit wie vorher - versuche die Join-Anweisung umzuschreiben.
Vielleicht habt ihr eine Lösung für mein Problem.
Vielen Dank

Ciao - honeyjam

Re: JOIN-Anweisung

Beitrag von Frank183 (ForumUser / 5 / 1 / 1 ) »
Hallo Honeyjam,

das geht leider so nicht, da EQKT sprachabhänig ist. Wenn Du einen INNER JOIN machst, dann fallen Equipments raus, bei der die Bezeichnung nicht in der gewünschten Sprache gepflegt ist.

Du wirst nicht drum herum kommen, die Bezeichnung nachher in einer Schleife nachzulesen.

Wg. Performance lohnt es sich allerdings, das gepuffert zu tun. Außerdem kannst Du über einen LEFT OUTER JOIN ja schon mal alle Bezeichnungen mitnehmen, die in der gewünschten Sprache gepflegt sind.

Viele Grüße
Frank

Re: JOIN-Anweisung

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
also das mit mit dem loop über die interne Tabelle muss so funktionieren. Kannst ja auch mal hart ne Sprache für SPRAS im single select codieren.

poste dochmal etwas mehr von deinem Coding das wir sehen, wo die Schleife deiner Meinung nach nicht funktioniert.

gruss
tony
<:: XING-Gruppe Tricktresor::>

Re: JOIN-Anweisung

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi All,

hier ein paar Zeilen mehr von meinem Funktionsbaustein-Coding:
....

TYPES: BEGIN OF lys_equipmt
, WERK TYPE MARD-WERKS
, EQUIPMENT_NR TYPE CRVE_A-EQUNR
, EQUIPMENT TYPE EQKT-EQKTU
, END OF lys_equipmt
.


DATA: pt_equipmt TYPE TABLE OF lys_equipmt
, ps_equipmt TYPE lys_equipmt
, ls_equipment TYPE zigh_fc_equipment
.


IF NOT it_equipment IS INITIAL.
CLEAR it_equipment[].
ENDIF.

*... Planauftrag
IF NOT p_auftrag IS INITIAL.


SELECT
MARD~WERKS
MARD~MATNR
*CRVE_A~EQUNR
*EQKT~EQKTU
*EQUI~EQUNR
INTO TABLE pt_equipmt
FROM PLFH
JOIN CRVE_A ON CRVE_A~OBJID = PLFH~OBJID
LEFT JOIN MARD ON MARD~MATNR = CRVE_A~EQUNR
*LEFT JOIN EQKT ON EQKT~EQKTU = EQUI~EQUNR
WHERE PLFH~PLNNR = arbeitsplan
*AND EQKT~EQKTU = equipment
AND PLFH~LOEKZ = space.

SORT pt_equipmt.
DELETE ADJACENT DUPLICATES FROM pt_equipmt.
LOOP AT pt_equipmt INTO ps_equipmt.
CLEAR ls_equipment.
ls_equipment-planauftrag = p_auftrag.
ls_equipment-fertigungsauftrag = f_auftrag.
ls_equipment-material = material.
ls_equipment-werk = ps_equipmt-werk.
ls_equipment-equipment_nr = ps_equipmt-equipment_nr.
ls_equipment-equipment = ps_equipmt-equipment.

IF NOT ps_equipmt-werk IS INITIAL.
ls_equipment-verfuegbarkeit = 'X'.
ENDIF.

.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND ls_equipment TO it_equipment.
ENDLOOP.
ENDIF.



Es gibt die Tabelle EQUI - ganz am Schluss dieser Tabelle gibt es z.B. die Spalte EQKTU. Diese Spalte kann ich leider in meiner Join-Anweisung nicht verwenden. Seht ihr das auch so?
Es gibt eine weitere Tabelle EQKT - in dieser Tabelle ist die Spalte EQKTU vorhanden. Diese könnte ich in meiner Join-Anweisung verwenden.

Wie bastle ich am besten mein Coding so, dass es auch nachher funktioniert. Der jetzige Status ist, dass bei der Ausgabe die Spalte Equipment leer bleibt, weil die Join-Anweisung dafür fehlt, bzw. nicht funktioniert.

Vielen Dank im Voraus

Ciao

Re: JOIN-Anweisung

Beitrag von Frank183 (ForumUser / 5 / 1 / 1 ) »
SInngemäss (Pseudocode)

Code: Alles auswählen.

LOOP AT mytab ASSIGNING <fs>.

  SELECT SINGLE eqktu
     INTO <fs>-eqktu
     FROM EQKT
     WHERE equnr = <fs>-equnr AND 
                 spras = sy-langu.            "Oder 'DE' oder 'EN' oder ...
  IF sy-subrc <> 0.
    
    SELECT eqktu
       INTO <fs>-eqktu
       FROM EQKT
       UP TO 1 ROWS
       WHERE equnr = <fs>-equnr.
    ENDSELECT.

  ENDIF.

ENDLOOP.

Nebenbei gesagt würde ich auch eher das Feld EQUI-EQKTX nehmen, das ist mit Groß/Kleinschreibung, sieht idR lesbarer aus.

Außerdem kannst Du mal schauen ob der View V_EQUI vielleicht besser geeignet ist, aber aufpassen, da bekommst Du Dubletten.

Viele Grüße
Frank

Folgende Benutzer bedankten sich beim Autor Frank183 für den Beitrag:
honeyjam


Re: JOIN-Anweisung

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
hmm also wo ist denn da jetzt das Problem ? du machst eh schon einen Loop:

Code: Alles auswählen.

LOOP AT pt_equipmt INTO ps_equipmt.
CLEAR ls_equipment.
ls_equipment-planauftrag = p_auftrag.
ls_equipment-fertigungsauftrag = f_auftrag.
ls_equipment-material = material.
ls_equipment-werk = ps_equipmt-werk.
ls_equipment-equipment_nr = ps_equipmt-equipment_nr.
ls_equipment-equipment = ps_equipmt-equipment.

IF NOT ps_equipmt-werk IS INITIAL.
ls_equipment-verfuegbarkeit = 'X'.
ENDIF.

.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND ls_equipment TO it_equipment.
ENDLOOP.
und hier mal mit dem dazulesen :

Code: Alles auswählen.

DELETE ADJACENT DUPLICATES FROM pt_equipmt.
LOOP AT pt_equipmt INTO ps_equipmt.
CLEAR ls_equipment.
ls_equipment-planauftrag = p_auftrag.
ls_equipment-fertigungsauftrag = f_auftrag.
ls_equipment-material = material.
ls_equipment-werk = ps_equipmt-werk.
ls_equipment-equipment_nr = ps_equipmt-equipment_nr.
*********************************************************************************************
select single eqktu into ls_equipment-equipment from eqkt
      where matnr eq ps_equipmt-equipment_nr
      and    spras  eq sy-langu.
*oder was auch immer du für eine Spras haben willst. :-)
*********************************************************************************************


IF NOT ps_equipmt-werk IS INITIAL.
ls_equipment-verfuegbarkeit = 'X'.
ENDIF.

.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND ls_equipment TO it_equipment.
ENDLOOP.
vielleicht versteh ich es auch nicht, oder wir reden wirklich ganz böse aneinander vorbei. :D

gruss
tony
<:: XING-Gruppe Tricktresor::>

Re: JOIN-Anweisung

Beitrag von honeyjam (ForumUser / 43 / 11 / 0 ) »
Hi Frank,
vielen Dank!
Es läuft :-)
Ciao - honeyjam

Seite 1 von 1

Vergleichbare Themen

16
Antw.
3464
Views
Select Join mehrere Tabellen anschließend IF-Anweisung
von thinkpad-94 » 30.01.2019 13:16 • Verfasst in ABAP® für Anfänger
1
Antw.
766
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger
9
Antw.
3154
Views
IF Anweisung
von Mathan » 06.09.2006 13:07 • Verfasst in ABAP® Core
18
Antw.
5215
Views
Select-Anweisung...
von Nici » 19.07.2004 13:18 • Verfasst in ABAP® für Anfänger
2
Antw.
1899
Views
modify Anweisung
von Jan_M. » 31.05.2004 21:39 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 134
Group Items auf einer Filterbar
vor 5 Wochen von Bright4.5 1 / 168