Abfrage für gleiche Inhalte (Access)

erni642, Sonntag, 27.01.2019, 11:42 (vor 205 Tagen)

Hallo Fachleute,
als Access-Freizeit-User komme ich nicht weiter und benötige Hilfe.

Ich möchte mit einer Abfrage nur die 10-stelligen Artikel (Textfeld) ausgeben, bei denen die ersten 8 Stellen gleich sind.
Beispiel:
Artikel: 111111111A, 111111112B, 111111113C, 222222222A, 333333335C, 333333336D
Ausgabe: 111111111A, 111111112B, 111111113C, 333333335C, 333333336D

Mit welchen Kriterien kann ich das erreichen?

Kann mir jemand helfen? Danke im Voraus:-)
Erni

Abfrage für gleiche Inhalte

Martin Asal @, Sonntag, 27.01.2019, 16:37 (vor 205 Tagen) @ erni642

Hallo Ernie,

es könnte sein, dass deine Tabelle nicht korrrekt aufgebaut ist, sprich, gegen die Erste Normalform verstößt. Aber zu deinem Problem: So etwas kann man mit einer Unterabfrage lösen:

SELECT Artikel
FROM Tabelle1
WHERE (LEFT([Artikel],8)) IN (
   SELECT LEFT([Artikel],8)
   FROM Tabelle1
   GROUP BY LEFT([Artikel],8)
   HAVING COUNT(LEFT([Artikel],8))>1
);

Martin

Abfrage für gleiche Inhalte

erni642, Sonntag, 27.01.2019, 19:31 (vor 205 Tagen) @ Martin Asal

Hallo Martin,

vielen Dank für Deine schnelle Antwort.

Ich habe eine Tabelle "Artikel" mit Feld "ArtikelNr" (Textfeld) und eine "Artikel-Unter-Abfrage" von Tabelle "Artikel" mit Feld "ArtikelNr".

Habe ich Deinen Vorschlag so umgesetzt:

"Artikel-Abfrage_N" von "Artikel-Unter-Abfrage" erstellt, unter Feld "ArtikelNr" bei Kriterien Deinen SQL-Vorschlag in einer Zeile eingefügt mit folgenden Anpassungen:

SELECT ArtikelNr
FROM Artikel
WHERE (LEFT([ArtikelNr],8)) IN (
SELECT LEFT([ArtikelNr],8)
FROM Artikel
GROUP BY LEFT([ArtikelNr],8)
HAVING COUNT(LEFT([ArtikelNr],8))>1
);

Leider habe ich so gut keine Kenntnisse von SQL und so kommt die Fehlermeldung:
"Die Unterabfrage in diesem Ausdruck hat eine fehlerhafte Syntax. Prüfen Sie die syntax der Unterabfrage, und setzen Sie die Unterabfrage in Klammern.

Was habe ich falsch gemacht?

Erni

Abfrage für gleiche Inhalte

Martin Asal @, Sonntag, 27.01.2019, 20:08 (vor 205 Tagen) @ erni642

Habe ich Deinen Vorschlag so umgesetzt:
"Artikel-Abfrage_N" von "Artikel-Unter-Abfrage" erstellt

??? Verstehe ich nicht.

Du brauchst nur eine einzige Abfrage.

Teste mal spaßeshalber folgende Abfrage:

SELECT ArtikelNr
FROM Artikel
WHERE (LEFT([ArtikelNr],8)) IN (
"11111111"
);

Nur, damit du das Prinzip soweit verstehst, und das lässt sich ja auch in der Entwurfsansicht darstellen.

Martin

Abfrage für gleiche Inhalte

erni642, Montag, 28.01.2019, 09:18 (vor 204 Tagen) @ Martin Asal

Hallo Martin,

natürlich funzt Dein erster Vorschlag. Danke dafür. Aufgrund meiner doch recht geringen Kenntnisse habe ich erst später herausgefunden, wie eine SQL-Abfrage aufgebaut ist.
Aber ich glaube, mein Denkansatz war verkehrt.
Ich will über eine Abfrage folgendes erreichen:
Alle "ArtikelNr" aus Tabelle "Artikel" mit gleichen "ArtikelNr" aus Tabelle "PrsNeu" angezeigen ---> kein Problem
Dabei aber nur alle die "ArtikelNr" aus beiden Tabellen, bei denen die ersten 8 Stellen der "ArtikelNr" gleich sind. Nur in der Tabelle "PrsNeu" gibt es mehrfach gleiche "ArtikelNr".
So sollte das Ergenis aussehen (Beispiel, ohne Fett):
ArtikelNr------- ArtikelNr
(Artikel)-------- (PrsNeu)
0304500800
0304500801----0304500801
0304500802
0304500803----0304500803
0304500803----0304500803
0420000300----0420000300
B0000567AA
B0000567HK----B0000567HK

Hättest Du dafür einen Lösungsvorschlag?:-)
Erni

Abfrage für gleiche Inhalte

Martin Asal @, Dienstag, 29.01.2019, 08:46 (vor 203 Tagen) @ erni642

Sorry, aber ich verstehe nicht, welche denn nun angezeigt werden sollen?
Egal, experimentiere mal selbst mit Links(), und erstelle eine Beziehung zwischen den beiden Tabellen. Und wie du siehst: Du hättest kein Problem, wenn deine ArtikelNr vernünftig normalisiert wäre.

Martin

Abfrage für gleiche Inhalte

erni642, Dienstag, 29.01.2019, 14:35 (vor 203 Tagen) @ Martin Asal

Hallo Martin,
ich glaube, ich muß Dir mehr Hintergrund-Infos geben. Es handelt sich um eine bestehende, täglich benutzte und von mir vor 18 Jahren erstellte, einfache Datenbank mit Frontend und Backend. Zuerst habe ich mit der DB selbst ca. 3 Jahre gearbeitet. Danach ist die DB bei einer Firma in Holland im Einsatz. Als Rentner betreue und erweitere die DB hin und wieder um einige Punkte. Die BD verwaltet Artikel (ca. 34000), Stücklisten (ca. 174000), Preise, Preis-Kalkulation über bis zu 9 Stücklistenebenen, Lagerhaltung, Teilebedarf, Bedarfsverknüpfung mit einem Warenwirtschaftprogramm (Paradox-DB).
Bei meinen mir selbst beigebrachten Access-Kenntnissen fehlte bisher SQL.
Mein jetziges Anliegen soll die Prüfung von richtig zugeordneten ArtikelNr zu Neupreis-ArtikelNr erleichtern..
Es sollen zu den 10-stelligen ArtikelNr (tbl PrsNeu) alle 10-stelligen ArtikelNr (tblArtikel) angezeigt werden. Das würde so aussehen:

SELECT Artikel.ArtikelNr, PrsNeu.ArtikelNr
FROM Artikel LEFT JOIN PrsNeu ON Artikel.ArtikelNr = PrsNeu.ArtikelNr;

Dann würden aber alle 34000 ArtikelNr der tblArtikel mit angezeigt werden.

Wie muß die Anfrage aussehen, wenn nur die ArtikelNr (tbl Artikel) angezeigt werden, bei denen die ersten 8 Stellen der ArtikelNr beider Tabellen übereinstimmen?

Ich hoffe, daß es jetzt kar ist. So sollte das Ergebnis aussehen (Beispiel, ohne Fett):
ArtikelNr------- ArtikelNr
(Artikel)-------- (PrsNeu)
0304500800 (kein Eintrag)
0304500801----0304500801
0304500802 (kein Eintrag)
0304500803----0304500803 (doppelter Eintrag in Tabelle PrsNeu möglich)
0304500803----0304500803 (doppelter Eintrag in Tabelle PrsNeu möglich)
0420000300----0420000300
B0000567AA (kein Eintrag)
B0000567HK----B0000567HK

Erni

Abfrage für gleiche Inhalte

Martin Asal @, Dienstag, 29.01.2019, 16:54 (vor 203 Tagen) @ erni642

Theorietisch kannst da das ohne Unterabfrage machen, indem du zwei normale Abfragen erstellst, die jeweils nur auf einer der beiden Tabellen bestehen und um ein zusätzliches Feld erweitern, das die 8 Zeichen anzeigen. Dann erstellst du eine dritte Abfrage, die auf diesen beiden Abfragen basiert.

Im Prinzip habe ich das im Folgenden auch so gemacht, nur dass ich die beiden ersten Abfragen als Unterabfragen in die Dritte reingebaut habe. Dabei kam dann folgendes raus:

SELECT Artikel1.ArtikelNr, PrsNeu1.ArtikelNr AS PrsNeuNr
FROM (
   SELECT ArtikelNr, LEFT([ArtikelNr],8) AS L8
   FROM Artikel
   ) AS Artikel1
INNER JOIN (
   SELECT ArtikelNr, LEFT([ArtikelNr],8) AS L8
   FROM PrsNeu
   ) AS PrsNeu1
ON Artikel1.ArtikelNr = PrsNeu1.ArtikelNr;

... und da ich mir noch imer nicht ganz sicher bin, wie du es eigentlich haben willst, kannst du mal testen, die letzte Zeile im SQL wie folgt zu ändern:

ON Artikel1.L8 = PrsNeu1.L8

Martin

Abfrage für gleiche Inhalte

erni642, Freitag, 01.02.2019, 10:13 (vor 200 Tagen) @ Martin Asal

Hallo Martin,
danke für Deine Antwort. Schade, dass ich meine Vorstellungen nicht deutlicher machen konnte.
Deinen letzten Vorschlag kann ich nicht zum Laufen bringen.

Ich denke, hier schließen wir das Thema ab. Wäre schön gewesen, aber es ist ja nur "nice to have".
Danke nochmal für Deine Mühe.
Erni

RSS-Feed dieser Diskussion
powered by my little forum