Hallo,
ich habe hier folgendes Problem. Ich habe einen Import mit einer Datei, die aus unserm Großrechner kommt. Hier gibt es pro Kennung x Datensätze, was daher kommt, das wir Pro Kennung bis zu 99 Arbeitsgebiete vergeben können(vertikal). Dazu noch bis zu 99 Vorgangsarten Horizontal pro Arbeitsgebiet.
Daher kann also eine Kennung bis zu 99 mal vorkommen. Ich brauche aber eine Abfrage, wo die Felder Kennung; B-Typ-GS; B-Typ-HAG B-Typ-NR und AG enthalten sind, diese aber ebend nur einmal pro Kennung. Hinzu kommt noch, dass ich aus einer anderen Tabelle den Klartext zum Feld B-Typ-NR hinzufügen möchte. Wenn ich die SQL laufen lasse ohne das Hinzufügen des Klartextes geht es aber wenn ich den Klartext hinzufüge bekomme ich die Datensätze x mal. Was muss ich hier machen?
Bei der Abfrage begrenze ich direkt auf die GS01 und das HAG 55 weil ich nur danach filtern muss.
SELECT
AGVA.Kennung,
AGVA.[B-Typ-GS],
AGVA.[B-Typ-HAG],
AGVA.[B-Typ-Nr],
[B-Typ].Bezeichnung
FROM
AGVA INNER JOIN [B-Typ] ON (AGVA.[B-Typ-HAG] = [B-Typ].AG) AND (AGVA.[B-Typ-Nr] = [B-Typ].[B-TYP-Nr])
WHERE
(((AGVA.[B-Typ-GS])=1) AND ((AGVA.[B-Typ-HAG])=55) AND (([B-Typ].Bezeichnung) Like "*Reg*"));
Was muss ich hier verändern? Dass halt immer nur einmal die Kennung gezeigt wird und die anderen DS wegfallen.
Danke und wenn es unverständlich ist, dann versuche ich es auch gerne noch anders zu beschreiben.
DD
@DD 1. Zeige ein Bild des Datenmodells (Datenbanktools -> Beziehungen)
2. Suche hier oder im Schwesterforum nach dem Begriff "Aufzählungsfelder",
und lies, was dazu geschrieben steht.
gruss ekkehard
ZitatDass halt immer nur einmal die Kennung gezeigt wird und die anderen DS wegfallen.
Du musst nur im Datensatz ein Merkmal haben, das pro Kennung nur einmal auftritt. Dann kannst Du darauf filtern.
Hallo,
@ekkehard
Es gibt hier kein Datenmodell, da ich die Ergebnisse nachher wieder im Großrechner verarbeiten muss. Nur da kann man halt nicht Filtern.
Ich habe nochmal die Tabellen und die Abfrage als Bilder angehangen.
Mit Aufzählungsfeldern meinst Du da das gleiche wie Eberhard? oder was genau. Wenn ich danach gegoogelt oder hier im Forum geschaut habe, finde ich nichts was auf mein Problem passen würde.
@Eberhard
Zitat von: ebs17 am Februar 22, 2023, 18:23:58ZitatDass halt immer nur einmal die Kennung gezeigt wird und die anderen DS wegfallen.
Du musst nur im Datensatz ein Merkmal haben, das pro Kennung nur einmal auftritt. Dann kannst Du darauf filtern.
Ich habe hier leider kein Feld was es pro Kennung nur einmal gibt außer halt den Namen der Kennung.
Daher fällt das leider flach.
Trotzdem schonmal danke
DD
ZitatIch habe hier leider kein Feld
Man könnte ja schlicht ein Autowert-Feld ergänzen und von solch einer ID immer den Minimalwert nehmen, also immer den ersten nehmen. Ob das sachlich einen Sinn gibt, ist eine andere Frage.
Du könntest auch schlicht per DISTINCT gruppieren und da alle Felder aus der SELECT-Liste rauswerfen, die bei einer Vereinzelung stören.
Guten Morgen,
Ein Autowert Feld hinzuzufügen ist kein Problem aber wie muss dann die Abfrage aussehen, dass er da immer nur den kleinsten Wert pro Kennung nimmt?
Das mit dem DISTINCT hatte ich schon ausprobiert, bringt aber nicht das Ergebnis. :=(
Aber vielleicht kannst Du mir ja mal kurz zeigen wie das mit dem kleinsten Wert gehen würde bei einer Abfrage.
Danke und einen schönen Tag
DD
Hallo, habe das mal versucht mit dem Min hinzubekommen, ist aber auf ganzer Linie gescheitert.
In Abb 2.jpg sieht man den Versuch der Abfrage
In Abb 1.jpg sieht man den Tabelleninhalt AGVA (hier sind alle Kennungen x mal enthalten
In Abb 3.jpg sieht man das Ergebnis ohne den Zusatz Min - hier wird die Bezeichnung richtig abgebildet.
In Abb 4.jpg sieht man das Ergebnis mit dem Zusatz Min - hier wird auch immer noch jede Kennung x mal aufgelistet, aber auch der Inhalt des Bezeichnungsfeldes ist kryptisch.
Sorry, ich weiß hier wirklich nicht wie ich das angehen kann.
DD
SELECT
AGFA.ID,
AGVA.Kennung,
AGVA.[B-Typ-GS],
AGVA.[B-Typ-HAG],
AGVA.[B-Typ-Nr]
FROM
AGVA
INNER JOIN
(
SELECT
Kennung,
MIN(ID) AS MinID
FROM
AGVA
GROUP BY
Kennung
) AS M
ON AGVA.Kennung = M.Kennung
AND
AGVA.ID = M.MinIDDas ist die Behandlung der einen Tabelle. In dieser Abfrage kannst Du nun die Verknüpfung zu anderen Tabelle sowie die zusätzlichen Filter ergänzen.
Hallo Eberhard,
danke dafür, die Bezeichnung muss ich allerdings wirklich in einer zweiten Abfrage dranhängen, da ansonsten werden wieder alle mehrfach aufgeführt und die Bezeichnung ist wie im Bild gezeigt kaputt. Aber egal lasse ich einfach zwei hintereinander laufen!.
Danke
DD