Select for all entries Abfrage auf Initial

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

Select for all entries Abfrage auf Initial

Beitrag von Murdock (Specialist / 123 / 59 / 10 ) »
Hallo,

ich habe einen Select mit einer "for all entries" Klausel:

Code: Alles auswählen.

Select ...
         FROM marc AS v 
         FOR ALL ENTRIES IN lt_matnr
                WHERE
                 v~matnr  = lt_matnr-matnr
                 AND   v~werks = lt_matnr-werks 

So funktioniert das auch.

Nun können in lt_matnr auch Zeilen sein, bei denen die Spalte werks nicht gefüllt ist, die Daten der Materialnummern sollen dann aber dennoch selektiert werden.
Versuche in die Richtung von

Code: Alles auswählen.

Select ...
         FROM marc AS v 
         FOR ALL ENTRIES IN lt_matnr
                WHERE
                 v~matnr  = lt_matnr-matnr
                 AND   v~werks = lt_matnr-werks 
                 AND ( ( v~werks = lt_matnr-werks ) OR ( ' ' = lt_matnr-werks ) )
schlagen mit "Das Feld "' '" ist unbekannt." fehl.

Code: Alles auswählen.

 lt_matnr-werks = ' ' 
geht natürlich auch nicht, da die Selektionsspalte links stehen muss...

Ich habe versucht ein leeres Dummyfeld zu selektieren, um das zu vergleichen

Code: Alles auswählen.

select ' ' as dummy
was auch nicht geht (ich komme von der Oracle Ecke, da geht sowas). :up:

NVL() gibts auch nicht... :|

Ich wäre für Vorschläge dankbar. :(

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


Re: Select for all entries Abfrage auf Initial

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,

teile den Select doch auf.

if lt_matnr-werks is initial.
select
FROM marc AS v
FOR ALL ENTRIES IN lt_matnr
WHERE
v~matnr = lt_matnr-matnr.
else.
select
FROM marc AS v
FOR ALL ENTRIES IN lt_matnr
WHERE
v~matnr = lt_matnr-matnr
AND v~werks = lt_matnr-werks

endif.

Gruß
Wolfgang

Re: Select for all entries Abfrage auf Initial

Beitrag von Murdock (Specialist / 123 / 59 / 10 ) »
Danke Wolfgang für die Antwort.
Ganz so wird es aber nicht gehen, denke ich.
lt_matnr hat eine Menge Zeilen, da ist mal lt_matnr-werks gefüllt und mal nicht...

Re: Select for all entries Abfrage auf Initial

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Murdock hat geschrieben:lt_matnr hat eine Menge Zeilen, da ist mal lt_matnr-werks gefüllt und mal nicht...
Wolfgangs Vorschlag war ansich schon ein möglicher Weg, nur muss man die lt_matnr vorher aufteilen muss:

Code: Alles auswählen.

DATA: lt_mats TYPE TABLE ts_matnr,
      lt_werks TYPE TABLE ts_matnr.

* Temp Tabellen aufbauen:
lt_mats = lt_matnr.
DELETE TABLE lt_mats WHERE werks IS INITIAL.
SORT lt_mats BY matnr werks.
DELETE ADJACENT DUPLICATES FROM lt_mats COMPARING matnr werks.

lt_werks = lt_matnr.
DELETE TABLE lt_mats WHERE werks IS NOT INITAL.
SORT lt_werks BY matnr.
DELETE ADJACENT DUPLICATES FROM lt_werks COMPARING matnr.

* Daten lesen
IF lt_mats IS NOT INITIAL.
  SELECT * INTO TABLE lt_result FROM marc FOR ALL ENTRIES OF lt_mats WHERE matnr =lt_mats-matnr AND werk = lt_mats-werk.
ENDIF.

IF lt_werks IS NOT INITIAL.
  SELECT * APPENDING TABLE lt_result FROM marc FOR ALL ENTRIES OF lt_werks WHERE matnr = lt_werks-matnr.       "Hier auf das APPENDING TABLE achten, damit die Daten aus dem ersten Select nicht gelöscht werden.
ENDIF.
Evtl. kann man auch mit dem Vergleichs-Operarator LIKE arbeiten. Vor dem SELECT alle initialien WERKS auf % setzten. Wobei LIKE sehr inperformant ist.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Murdock

Gruß Hendrik

Re: Select for all entries Abfrage auf Initial

Beitrag von Murdock (Specialist / 123 / 59 / 10 ) »
Hendrik, auch ein Danke an Dich :D

Dass ich die Tabelle notfalls trennen kann ist mir klar. :wink:

Nur der Vollständigkeit halber, ich will hier nicht klugscheissen:
In Deinem Beispielcoding scheint es noch leichte Unstimmigkeiten zu geben, aber es führt den geneigten Leser auf den richtigen Weg 8)

Sehe ich das demnach richtig, dass es in einem Select mit "for all entries" eher nicht funktioniert?

Re: Select for all entries Abfrage auf Initial

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Murdock hat geschrieben:Sehe ich das demnach richtig, dass es in einem Select mit "for all entries" eher nicht funktioniert?
JA, das siehst du richtig, weil alle Einträge aus der "for all entries" nur mit EQ (=) verknüpft werden dürfen.

Kleiner Hinweis am Rande:
"for all entries" ist zwar eine feine Sache, aber sollte nicht mit anderen Parametern in der Abfrage gemischt werden.
Außerdem muss sichergestellt sein, dass die Tabelle NICHT leer ist, sonst wird IMMER alles selektiert.
Aus Performancegründen sollte auch sichergestellt werden, dass keine Zeile in der "for all entries" mit den Feldern die im Select angegeben werden doppelt vorkommt. Also wenn du drei Felder einer Tabelle die eigentlich 10 Felder hat für die Abfrage heranziehst, darf die Kombination dieser drei Felder nur einmal in der Tabelle vorkommen.
Am Besten sicherheitshalber vorher immer SORT und DELETE ADJACENT DUPLICATES machen.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Murdock

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Select for all entries Abfrage auf Initial

Beitrag von Murdock (Specialist / 123 / 59 / 10 ) »
ADT, auch Dir Danke.
Danke auch besonders für den Hinweis am Rande (obwohl ich das schon wusste :D ), es hilft aber bestimmt dem ein oder anderen, der später per Suche hierher kommt.

Ich werde dann wohl mal die Tabelle aufteilen :|

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2948
Views
Select Abfrage - For all Entries
von Cargo2 » 09.12.2016 10:56 • Verfasst in ABAP® Core
4
Antw.
3204
Views
If-Abfrage auf mehre Initial Felder
von fabianj » 11.05.2017 08:06 • Verfasst in ABAP® für Anfänger
7
Antw.
6292
Views
Select , where Feld is Initial
von autohandel7 » 06.06.2019 10:36 • Verfasst in ABAP® für Anfänger
1
Antw.
1968
Views
SELECT mit FOR ALL ENTRIES
von Marduk » 30.09.2005 12:55 • Verfasst in ABAP® Core
1
Antw.
2405
Views
Select mit all entries !!!!!
von Apabtalker » 01.04.2010 12:55 • 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

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2417
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9007