Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage für gleiche Inhalte

Begonnen von erni642, Januar 27, 2019, 14:20:36

⏪ vorheriges - nächstes ⏩

erni642

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

ebs17

Wäre das Dir selber möglich, wenn das Informationskonglomerat von Haus aus in atomare Informationen zerlegt wäre, es also im Mindestfall  ein Tabellenfeld mit der Information der 8 Ziffern und eines mit jener der 2 Ziffern gäbe? Das entspräche auch der Best Practice (Empfehlungen der Normalisation).

Das beschreibt dann auch den ersten Lösungsschritt. Dann muss man nur noch die schwere Entscheidung treffen, ob man eine solche Trennung einmalig vornimmt und speichert (=> Datenmodellierung) oder ob man das, was man ja so "gut" beherrscht, bei jeder neuen Verwendung der Daten immer wieder machen und dabei Aufwand investieren und Zeit verschwenden will.

Zur Umsetzung gibt es Textverarbeitungsfunktionen wie Links, Rechts, Teil, Instr, Len sowie dann auch anspruchsvollere und leistungsfähigere Funktionalitäten wie reguläre Ausdrücke. Die Erstgenannten solltest Du ohne große Beschreibungen selber umsetzen können.
Mit freundlichem Glück Auf!

Eberhard

Lachtaube

#2
Hallo Ernie,

wie schon mein Vorredner sagte, erleichert, vereinfacht und beschleunigt eine Normalisierung der Daten das Geschehen. Mit einer Funktion Liste per SQL aufbauen (o.ä.) kann man dann die Ausgabe erzielen.
SELECT SQLLIste( 'SELECT a & b
                  FROM   v
                  WHERE  a = "' & a & '"', ', ') AS Artikel
FROM   v
GROUP  BY a
HAVING Count( a ) > 1;
a stellt die ersten 8 Ziffern und b die folgenden 2 Ziffern dar, während v für die Tabelle steht.

Mit einem Datenbankserver geht's in einem Schritt, wie dieser <dbfiddle> zeigt.
Grüße von der (⌒▽⌒)

erni642

Hallo liebe Fachleute,
danke für Eure schnellen Antworten. Ich werde demnächst versuchen Eure Vorschläge mit meinen doch recht geringen Kenntnissen umzusetzen.
Danke.
Erni