Seite 1 von 1
Re: Mehrere Daten in einem Feld?
Verfasst: Do, 27.11.2014 20:18
von RobertG
Hallo Jerome,
um mehrere unterschiedliche Termine zu einem Kunden abzuspeichern brauchst Du eine zweite Tabelle "Termine". In der Tabelle "Termine" wird der Primärschlüssel aus der Tabelle "Kunden" als Fremdschlüssel mit abgespeichert. Zusammen mit dem Datum kann das dort gemeinsam der Primärschlüssel sein. Die Tabelle "Termine" muss also zwingend nur den Primärschlüssel aus "Kunden" und das Datum enthalten.
Diese Tabelle gehört dann in ein Subformular zur Tabelle "Kunden". Alle Termine zu dem Kunden siehst Du dann am besten mit Hilfe eines Tabellenkontrollfeldes.
Gruß
Robert
Re: Mehrere Daten in einem Feld?
Verfasst: Di, 02.12.2014 13:49
von RobertG
Hallo Jerome,
zuerst einmal natürlich: Fehlermeldungen aufmerksam lesen - wenn es nicht eine meldung ist, die Du schon auswendig kennst. Dann gegebenenfalls übersetzen.
Code: Alles auswählen
SELECT * FROM "Termine" GROUP BY "ID" WHERE DATEDIFF('mm', "Datum", CURRENT_DATE) > 12
Warum GOUP BY "ID"? Wie soll mit dem Feld "Datum" umgegangen werden. Da stehen doch mehrere Datumswerte - die Datenbank muss wissen, welchen der datumswerte sie bei einer Gruppierung nehmen soll.
ORDER BY "ID" wäre sicher erst einmal sinnvoller.
Code: Alles auswählen
SELECT "ID", MIN("Datum") AS "Dat" FROM "Termine" GROUP BY "ID" WHERE DATEDIFF('mm', "Datum", CURRENT_DATE) > 12
würde auch gehen.
Gruß
Robert
Re: Mehrere Daten in einem Feld?
Verfasst: Di, 06.01.2015 11:55
von RobertG
Hallo Jerome,
mit dem Feld "Name" hast Du ein Feld hinzugefügt, das "Not in aggregate function or group by clause" vorhanden ist. "aggregate function" ist eine Funktion, die etwas zusammensammelt, bei Dir das Minimum. Es wird das Minimum abhängig von "ID_ext" gesucht. Also jeweils für "ID_ext" das entsprechende Minimum gefunden. Jetzt ist die Frage, wie "Name" dazu passen soll. Du müsstest "Name" in die Gruppierung übernehmen, dann würde zumindest die Abfrage ablaufen - nur ob das Deinem Vorhaben entspricht kann ich hier nicht sagen:
Code: Alles auswählen
SELECT MIN( "letzter Anlagenbesuch" ), "ID_ext", "Name" FROM "Termine" GROUP BY "ID_ext", "Name"
Falls das nicht Deinem Vorhaben entspricht habe ich es hier etwas komplizierter:
Code: Alles auswählen
SELECT MIN( "letzter Anlagenbesuch" ) AS "Dat", "a"."ID_ext", (SELECT MAX("Name") FROM "Termine" WHERE "ID_ext" = "a"."ID_ext" AND "letzter Anlagenbesuch" = (SELECT MIN( "letzter Anlagenbesuch" ) FROM "Termine" WHERE "ID_ext" = "a"."ID_ext") ) AS "Name" FROM "Termine" AS "a" GROUP BY "ID_ext"
Es kann sein, dass zwei Namensbezeichnungen zu einem letzten Anlagenbesuch bei gleicher ID_ext passen. Deswegen habe ich in der korrelierenden Unterabfrage MAX("Name") stehen.
Gruß
Robert
Re: Mehrere Daten in einem Feld?
Verfasst: Di, 13.01.2015 19:21
von RobertG
Hallo Jerome,
vielleicht ist es einfacher, wenn Du die datenbank einmal postetst. So steigen da wohl nur noch wenige Leute durch. Dann magelt es auch an dem willen, sich mit der Sache weiter zu beschäftigen.
Gruß
Robert
Re: Mehrere Daten in einem Feld?
Verfasst: Do, 15.01.2015 08:56
von Jerome_mok
Alles klar, ich habe zu meinem Problem mal eine Testdatenbank hochgeladen...
Ziel ist es wie gesagt, dass die Abfrage "Zusammenstellung" auch die Daten aus der Tabelle "Kunden" anzeigt, die noch keinen Termin zugewiesen bekommen haben.
Hoffe das es nun verständlicher ist
LG Jerome
Re: Mehrere Daten in einem Feld?
Verfasst: Do, 15.01.2015 13:23
von madmatmed
Hallöchen,
bin mir nicht ganz sicher, weil ich es gerade nicht schaffe den ganzen Gedankengängen zu folgen, die schon in diesem Post waren, aber ich glaube dein Problem löst sich, wenn du ein LEFT OUTER JOIN verwnedest.
Code: Alles auswählen
SELECT "Kunden".*, "ältestes Datum"."Dat" AS "letzter Besuch" FROM "Kunden" LEFT OUTER JOIN "ältestes Datum" ON ( "ältestes Datum"."Suchwert" = "ID" )
Re: Mehrere Daten in einem Feld?
Verfasst: Do, 15.01.2015 13:45
von Jerome_mok
Wow, das ging doch wesentlicher einfacher als gedacht...
Vielen Dank für die schnelle Antwort!!!