Select

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Select

Beitrag von Gast ( / / 0 / 3 ) »
MoinMoin!

Ich steh grade voll auf´m Schlauch...
In einem Programm mache ich folgendes:

LOOP AT i_tab1 INTO wa_tab1.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE i_tab2
FROM zknnp
WHERE ( art = 'PR'
OR art = 'PB' )
AND kz = 'V'.
wa_tab2-nummer = wa_tab1-nummer.
...
ENDLOOP.

Ich will folgendes erreichen:
Meine i_tab2 soll mit den Daten aus zknnp gefüllt werden und in jeder Zeile soll die dazugehörige 'nummer' stehen.
Haut das so hin?

Könnte ich auch folgendes schreiben?
SELECT *
INTO CORRESPONDING FIELDS OF TABLE i_tab2
FROM zknnp
FOR ALL ENTRIES IN i_tab1
WHERE ( art = 'PR'
OR art = 'PB' )
AND kz = 'V'.
wa_tab2-nummer = wa_tab1-nummer.

Die passende 'nummer' soll immer in jeder Zeile in meiner Tabelle stehen.

Ich steh momentan auf dem Schlauch und bekomm´s gedanklich nicht gebacken.
Hoffe, jemand kann mich aufklären...

1000dank!

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


Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Ich gehe mal davon aus, dass das Feld NUMMER nicht in Deiner DB-Tabelle ZKNNP steht.
Wenn Du das so machst wie beschrieben ("wa_tab2-nummer = wa_tab1-nummer.") ändert sich das Feld NUMMER in der Struktur WA_TAB2, nicht jedoch in der Tabelle I_TAB2. Dazu musst Du noch einen MODIFY absetzen:

Code: Alles auswählen.

MODIFY i_tab2 FROM wa_tab2 TRANSPORTING nummer WHERE nummer = space.
Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
welche Verbindung gibt es denn zwischen den beiden Tabellen? :?:

Mit

Code: Alles auswählen.

LOOP AT i_tab1 INTO wa_tab1. 
SELECT * 
INTO CORRESPONDING FIELDS OF TABLE i_tab2 
FROM zknnp 
WHERE ( art = 'PR' 
OR art = 'PB' ) 
AND kz = 'V'. 
wa_tab2-nummer = wa_tab1-nummer. 
... 
ENDLOOP. 
selektierst Du für jeden!!! Eintrag der i_tab1 alle Einträge der ZKNNP, bei denen ART entweder 'PR' oder 'PB' und KZ 'V' beinhaltet. Es gibt aber keine Abhängigkeit zu Daten aus der Tabelle i_tab1.
Abgesehen davon wird der bisherige Inhalt von i_tab2 durch Verwendung von INTO CORRESPONDING mit jedem Durchlauf mit dem aktuellen Ergebnis der Selektion überschrieben. Korrekt wäre APPENDING CORRESPONDING...

Zunächst musst Du also klären, was und wie Du eigentlich selektieren willst, um Daten aus der ZKNNP in Abhängigkeit zur i_tab1 zu selektieren.

Im nächsten Schritt kannst Du dann mit dem SELECT ... FOR ALL ENTRIES alle Daten in Deine interne Tabelle holen und mit

Code: Alles auswählen.

LOOP AT i_tab1 INTO wa_itab1.
wa_itab2-nummer = wa_itab1-nummer.
MODIFY i_tab2 FROM wa_itab2
              WHERE <Bedingung mit Verbindung zu i_tab1>.
ENDLOOP.
die Schlüsselinformationen aus der i_tab1 nachtragen.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von GastX (Specialist / 288 / 6 / 20 ) »
@Gast:
Ist es so gewollt, dass trotz Loop über i_tab1 in den Selektionsbedingungen darauf kein Bezug genommen wird?

i_tab1 habe beispielsweise die Spalten nummer und daten1 mit folgendem Inhalt:

Code: Alles auswählen.

nummer   daten1

001      texta
002      textb
und zknnp sehe so aus

Code: Alles auswählen.

Art  KZ  zdata1   zdata2

PR   V   textz1a  textz2a
PB   V   textz1b  textz2b
XX   V   textz1c  textz2c
PR   Z   textz1d  textz2d
und i_tab2 habe die Spalten nummer, art und zdata1, dann soll nach Deinem Coding (+ Haubis Anmerkung) i_tab2 folgenden Inhalt haben:

Code: Alles auswählen.

Nummer  Art  zdata1
   
001     PR   textz1a  
001     PB   textz1b  
002     PR   textz1a  
002     PB   textz1b  
Richtig?

(Sehe gerade, dass ereglam u.a. die gleiche Stelle hinterfragt, poste es jetzt trotzdem ;-) )

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

Ist es richtig, daß für jeden Eintrag in i_tab1 immer derselbe Schwung von Daten in die i_tab2 geschaufelt werden soll, und jede Portiion hat die Nummer des zugehörigen Eintrages der i_tab1 ????

Da fällt mir noch ein: wenn die i_tab1 viele Einträge enthält, wäre es performanter, erstmal die Datenbanktabelle "reinzusaugen" und in einer geschachtelten Loop in die i_tab2 zu überstellen und dabei die Nummer aus i_tab1 zu ergänzen.

SAP bietet dazu auch ein paar Beispiele, wie man sowas machen soll.

Offensichtlich soll der Datenbestand der Datenbanktabelle (der zur konstanten Selektion passt) vervielfältigt werden.
(Was machst Du mit den Daten, wenn sie in i_tab2 sind???).

mfg
babap

Beitrag von Gast ( / / 0 / 3 ) »
Oh Man, bin ich ein Schaf!

Hab vergessen bei dem Select was wesentliches zu erwähnen: :oops:

LOOP AT i_tab1 INTO wa_tab1.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE i_tab2
FROM zknnp
WHERE ( art = 'PR'
OR art = 'PB' )
AND kz = 'V'
:!: :!: :!: AND BSTNR = wa_tab1-bestnr :!: :!: :!: .
wa_tab2-nummer = wa_tab1-nummer.
...
ENDLOOP.

Ja, 'nummer' steht nicht in meine Tabelle.

APPENDING CORRESPONDING muss ich verwenden um das Überschreiben zu verhindern?
Gut, das ändere ich gleich mal ab! Vielen Dank für den Tipp!!! :D

Beitrag von Gast ( / / 0 / 3 ) »
(Was machst Du mit den Daten, wenn sie in i_tab2 sind???).


Öhm, dann Selektiere ich Anhand der Daten nochmal eine Tabelle.

Also, in i_tab2 stehen diverse Werte, die ich für eine Selektion für eine andere Tabelle brauche.

Mag sein, dass mein Werk mächtig unlogisch ist -> Ich hab noch nicht so den Durchblick in der Entwicklung... :?

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Gast hat geschrieben:...
LOOP AT i_tab1 INTO wa_tab1.
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE i_tab2 "<<<
FROM zknnp
WHERE ( art = 'PR'
OR art = 'PB' )
AND kz = 'V'
:!: :!: :!: AND BSTNR = wa_tab1-bestnr :!: :!: :!: .
wa_tab2-nummer = wa_tab1-nummer.

Code: Alles auswählen.

* hier muss noch in irgendeiner Form NUMMER in i_tab2 übertragen werden
MODIFY i_tab2 FROM wa_tab2 "z.B.
              TRANSPORTING nummer "nur dieses Feld ändern
              WHERE nummer EQ space. "nur die ohne Nummer
Gast hat geschrieben: ...
ENDLOOP.
...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
Gast hat geschrieben:(Was machst Du mit den Daten, wenn sie in i_tab2 sind???).


Öhm, dann Selektiere ich Anhand der Daten nochmal eine Tabelle.

Also, in i_tab2 stehen diverse Werte, die ich für eine Selektion für eine andere Tabelle brauche.

Mag sein, dass mein Werk mächtig unlogisch ist -> Ich hab noch nicht so den Durchblick in der Entwicklung... :?
irgendwie hört sich das so an, als ob eine geschickt definerte DB-View schon ein paar der Vorselektionen übernehmen könnte ...

Gruß
babap

Beitrag von Gast ( / / 0 / 3 ) »
@ereglam
DANKE :D

@babap
DB-View :?:

Seite 1 von 1

Vergleichbare Themen

4
Antw.
21501
Views
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37 • Verfasst in ABAP® für Anfänger
4
Antw.
10898
Views
Performance: SELECT UP TO 1 ROWS vs. SELECT SINGLE
von roman1983 » 04.09.2008 14:29 • Verfasst in ABAP® für Anfänger
2
Antw.
1631
Views
Job hängt an select, wie herausfinden welches select
von dpz » 01.08.2019 10:23 • Verfasst in ABAP® Core
8
Antw.
7853
Views
SELECT SINGLE oder SELECT UP TO 1 ROWS?
von nickname8 » 12.04.2021 10:38 • Verfasst in ABAP® für Anfänger
2
Antw.
3560
Views
Select * und Select von einzelnen Werten zugleich
von StefanJue » 04.10.2006 18:10 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.