select über 3 Tabelle mit einer rekursive Beziehung


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

select über 3 Tabelle mit einer rekursive Beziehung

Beitragvon evian » 10.05.2016, 12: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
evian
ForumUser
 
Beiträge: 2
Registriert: 10.05.2016, 10:49
Dank erhalten: 0 mal
Ich bin: Student/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: select über 3 Tabelle mit einer rekursive Beziehung

Beitragvon zzcpak » 10.05.2016, 13: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)
zzcpak
Expert
 
Beiträge: 632
Registriert: 29.07.2003, 15:10
Dank erhalten: 53 mal

Re: select über 3 Tabelle mit einer rekursive Beziehung

Beitragvon evian » 10.05.2016, 14: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.
evian
ForumUser
 
Beiträge: 2
Registriert: 10.05.2016, 10:49
Dank erhalten: 0 mal
Ich bin: Student/in

Re: select über 3 Tabelle mit einer rekursive Beziehung

Beitragvon zzcpak » 10.05.2016, 14: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.
zzcpak
Expert
 
Beiträge: 632
Registriert: 29.07.2003, 15:10
Dank erhalten: 53 mal


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
(LKW)Bedarfsvorschau je Debitor
vor 56 Minuten von owny 0 Antw.
(LKW)Bedarfsvorschau je Debitor
vor 56 Minuten von owny 0 Antw.
Lieferplan, Einteilungen, Feinabrufe
vor 15 Stunden von bapimueller 0 Antw.
gelöst Smartforms Struktur rechtsbündig
vor 19 Stunden von qyurryus 3 Antw.
CALL_FUNCTION_SYSCALL_ONLY in RFC-Aufruf
vor 21 Stunden von lausek 0 Antw.

  Ähnliche Beiträge beta
SELECT über interne Tabelle
26.10.2006, 14:46 von DeathGuardian 2 Antw.
gelöst Select aus einer Tabelle mit Bedingung aus weiteren Tabelle
02.01.2017, 14:24 von Dyrdek 1 Antw.
Liste aus einer internene Tabelle über FUBA erstellen
30.10.2006, 13:57 von Jura 21 Antw.
Select ueber alle Felder einer Tabelle
27.02.2006, 16:07 von KarstenB 4 Antw.
Join über Tabelle trotz Pool/Cluster Tabelle
05.12.2006, 10:00 von em.tie 2 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder