select über 3 Tabelle mit einer rekursive Beziehung

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

select über 3 Tabelle mit einer rekursive Beziehung

Beitrag von evian (ForumUser / 2 / 0 / 0 ) » 10. Mai 2016 13:25

Hallo Zusammen

ich habe ein Problem. Und zwar habe ich 3 Tabelle e070CTV (keine Tabelle sondern eine View über 3 Tabellen) e070A (die brauche ich als Verbindungstabelle) und Ctsproject (brauche ich nur EXTERNALID).
die e070ctv hat eine rekursive Beziehung. Ich brauch alle Transportaufträge UND ihre aufgaben. Trkorr ist hier der Schlüssel und Strkorr der Fremdschlüssel.
Ausserdem habe ich noch 3 Select-Options mit denen ich eine Transportauftrag, User oder ein Projekt auswählen kann.

Wenn ich etwas selektiere möchte ich eigentlich so etwas bekommen.
TRKORR STRKORR EXTERNALID ...
Transportauftr. nichts zugehöriges Projekt ...
Aufgabe Transportauftrag zugehöriges Projekt ...

bis jetzt habe ich dieses Select.
Dies ist, wie mir klar ist falsch, mir fehlen erstens die Aufgaben, zweitens wenn ich nur nach dem User selektiere gibt es mir die transportaufträge gefühlt hundertfach wieder
SELECT e070ctv~trkorr, e070ctv~strkorr, ctsproject~externalid,
e070ctv~as4user, e070ctv~trstatus, e070ctv~as4date,
e070ctv~as4time, e070ctv~as4text, e070ctv~trfunction
INTO CORRESPONDING FIELDS OF TABLE @gt_struktur
FROM ( e070ctv LEFT JOIN e070a ON e070ctv~trkorr = e070a~trkorr )
LEFT JOIN ctsproject ON e070a~reference = ctsproject~trkorr
WHERE e070ctv~trkorr IN @so_trkor
AND ctsproject~externalid IN @so_extid
AND e070ctv~as4user IN @so_user


Re: select über 3 Tabelle mit einer rekursive Beziehung

Beitrag von zzcpak (Expert / 641 / 5 / 55 ) » 10. Mai 2016 14:50

dürfte etwas umständlich werden, alles einen SELECT reinzuquetschen. JOINs sind nicht immer die beste Lösung

Ich würde folgendermaßen vorgehen:
- Transportaufträge aus E070 auslesen (also STRKORR = leer)
- E070A für TRKORR = E070~TRKORR dazulesen mit ATTRIBUTE = 'SAP_CTS_PROJECT'
- mit E070A~REFERENCE = CTSPROJECT~TRKORR dann deine EXTERNALID auslesen
- die dazugehörigen Aufgaben aus E070 lesen (STRKORR = TRKORR)

Re: select über 3 Tabelle mit einer rekursive Beziehung

Beitrag von evian (ForumUser / 2 / 0 / 0 ) » 10. Mai 2016 15:16

Hallo zzcpak

wenn ich ehrlich bin verstehe ich nicht ganz was du damit meinst. Meinst du vier Selektionen?
Meine jetzige Version ist dieses Select dass ich geschrieben habe und ein weiteres Select, welches mir die aufgaben gibt. Jedoch gibt es mir dann alle aufgaben(auch wenn ich nur ein projekt auswähle), da ich ja die externalid nicht abfragen kann.
Bei deiner Version ist es noch verwirrter ^^.
Ich habe ausserdem einen Left Join gemacht, da ich alle Transportaufträge brauche, aber nicht unbedingt ein Projekt.

Re: select über 3 Tabelle mit einer rekursive Beziehung

Beitrag von zzcpak (Expert / 641 / 5 / 55 ) » 10. Mai 2016 15:39

ahh, glaube, das habe a bisserl was falsch verstanden.
Trotzdem solltest du statt über den View direkt über Tabelle E070 gehen und beim JOIN E070 - E070A natürlich KEINEN LEFT JOIN.

so in der Art:
Das Projekt ist dem Transportauftrag zugeordnet, die Aufgaben dem Auftrag, daher würde ich die Aufgaben in einem zweiten Schritt lesen.

Code: Alles auswählen.

DATA:
  gs_e070       TYPE e070,
  gs_ctsproject TYPE ctsproject.

SELECT-OPTIONS:
  so_trkor FOR gs_e070-trkorr,
  so_user FOR gs_e070-as4user,
  so_extid FOR gs_ctsproject-externalid.


TYPES:
  BEGIN OF ts_list,
    trkorr     TYPE trkorr,
    externalid TYPE tr_extpid,
    task       TYPE trkorrs,
  END OF ts_list.

DATA:
  gt_list   TYPE STANDARD TABLE OF ts_list,
  gs_list   TYPE ts_list,
  gv_trkorr TYPE trkorr.
*
SELECT e070~trkorr, ctsproject~externalid
  INTO CORRESPONDING FIELDS OF @gs_list
  FROM ( ( e070 JOIN e070a
    ON e070a~trkorr = e070~trkorr )
    LEFT JOIN ctsproject
    ON ctsproject~trkorr = e070a~reference )
  WHERE e070~trkorr IN @so_trkor
  AND   e070~as4user IN @so_user
  AND   ctsproject~externalid IN @so_extid.

  SELECT trkorr FROM e070 INTO TABLE gs_list-task
    WHERE strkorr = gs_list-trkorr.

  APPEND gs_list TO gt_list.

ENDSELECT.

LOOP AT gt_list INTO gs_list.
  WRITE: / gs_list-trkorr,
           gs_list-externalid.
  LOOP AT gs_list-task INTO gv_trkorr.
    WRITE: / '    ', gv_trkorr.
  ENDLOOP.
ENDLOOP.

Seite 1 von 1

Aktuelle Forenbeiträge

Langtext zur Exception
vor 44 Minuten von a-dead-trousers 11 / 96
Adobe LiveCycle Designer - Ausblenden Text auf letzter Seite
vor 2 Stunden von a-dead-trousers 4 / 91
Welche Entwicklertools?
vor 17 Stunden von LostDarkness 2 / 922
Werksspezifische Konfiguration kopieren
vor 19 Stunden von eleve 2 / 48
Removal of left space - next to a docking container
vor 19 Stunden von Haemma83 16 / 114

Unbeantwortete Forenbeiträge

BAPI_PO_CREATE1 und Einkaufsinfosatz
vor 3 Tagen von SweetRuedi 1 / 81
WCOCO: Gruppe für Betragsfelder 0S01
vor 5 Tagen von SAP_ENTWICKLER 1 / 52
CAS-Nr.: Chemical Abstracs Service
vor einer Woche von SAP_ENTWICKLER 1 / 92
Interaktives Skript, Rolle IC-Manager
vor 3 Wochen von erubadhron86 1 / 129