![]() |
AW: Problem mit Group by in Access
Die Fehlermeldung sagt es ja schon.
Jedes Feld in der Feldliste muss entweder Teil der Gruppierung oder ein Aggegat sein! Du gruppierst über Materialrollen.Rollennummer und Rollenlager.Lagerplatz. Entweder du Weitest die Gruppierung auf Materialrollen.[Mat-Nr] aus oder Du sagst Access welche Mat-Nr der zusammengefassten Du möchtset ( die kleinste, größte, den Durschnitt, die Summe aller Nummern, ... |
AW: Problem mit Group by in Access
Jetzt dieses:
Delphi-Quellcode:
Jetzt ohne Fehlermeldung, jedoch das Ergebnis ist gleich als ob ohne Group By wäre.:?
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('SELECT Materialrollen.[Mat-Nr], Materialrollen.Rollennummer, Materialrollen.DatumAb, Rollenlager.Lagerplatz, Rollenlager.Rollennummer FROM Materialrollen ');
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('LEFT JOIN Rollenlager ON Rollenlager.Rollennummer = Materialrollen.Rollennummer where ((Materialrollen.[Mat-Nr] = ' + EditMaterialeingangMatNr.Text + ') and (Materialrollen.DatumAb is NULL))'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add(' GROUP BY Materialrollen.[Mat-Nr], Materialrollen.Rollennummer, Rollenlager.Lagerplatz, Materialrollen.DatumAb, Rollenlager.Rollennummer'); |
AW: Problem mit Group by in Access
Ist ja auch logisch, wenn alle Felder in der Gruppierung sind bedeutet es ja dass du aus jedem datensatz eine Gruppe machst!
Gruppieren heisst ja Zusammenfassen. Dadurch verlierst Du die Detailsinformationen der Datensätze in den Feldern über die nicht gruppiert wird. Willst Du diese Felder trotzdem haben musst Du angeben, welche Wert bzw. Aggregat Du willst. Beispiel Name Geschlecht Alter Größe Max männlich 20 1,80 Susi weiblich 18 1,50 Bob männlich 35 1,70 Sonja weiblich 30 1,60
SQL-Code:
select
sum(*) as Anzahl, Geschlecht, //Gruppierung min(Alter) as Juengste, max(Alter) as Älteste, avg( Alter) Durschnittsalter from Tabelle group by Geschlecht; |
AW: Problem mit Group by in Access
Materialrollen.[Mat-Nr] = ' + EditMaterialeingangMatNr.Text ist eindeutig. Es gibt mehrere Materialrollen, die möglicherweise auf mehrere Lagerplätzen liegen (oder auch nicht).
Möchte nur die Lagerplätze anzeigen, jedoch nur einmal pro Lagerplatze. Wie kann ich eine Aggregatfunktion aus Rollennummern bilden? Danke, Luckner |
AW: Problem mit Group by in Access
Zitat:
|
AW: Problem mit Group by in Access
Ich glaube, ich muss mir erst mal die Group BY Funktion noch so richtig anschauen. Möglicherweise bekomme ich dann eine Idee, wie ich das machen kann.
Danke, Luckner |
AW: Problem mit Group by in Access
Schau Dir doch nochmal mein Beispiel oben an:
Wenn man wie oben nach Geschlecht gruppiert, erhält man einen Datensatz pro Geschlecht, alle anderen Felder der Abfrage müssen also als Aggegat vorliegen, selbst wenn zufällig alle Felder der zusammenfassenden Datensätze gleich wären. Im Beispiel oben sind es jeweils 2 Datensätze welche zusammengefasst werden, es könnten aber auch mehr sein. Beim Geschlecht gibt es ja bekanntlich nur 2 (bzw. 3) egal wieviele Personen in der Tabelle gespeichert sind erhält man immer 2 bzw. 3 Datensätze. Im Beispiel oben werden für die Ausprägung "weiblich" des Feldes Geschlecht Susi und Sonja zusammengefasst. Für die Felder ausser Geschlecht muss deshalb entschieden werden welche/s Aggegat man möchte. Ich habe mich beim Beispiel mal auf das Feld Alter beschränkt und jeweils den kleinsten(MIN), den größten (MAX) und den Durschnittswert(AVG) verwendet. Wenn die Personen zusammen Aufzugfahren könnte auch die Summe der Gewichte interessant sein (Maximalgewicht des Aufzuges). |
AW: Problem mit Group by in Access
Werde ich mache. Wobei ich mich frage,warum ich da irgendwelche Summen oder andere Aggregatzustände aus willkürlichen Materialnummern oder Rollennummern erzeugen soll. Aber ich werde anhand dieses Beispiels versuchen diese Funktion zu verstehen.
Danke. |
AW: Problem mit Group by in Access
Wenn Du die Felder nicht benötigst einfach weglassen oder Dummies verwenden:
SQL-Code:
select
0 as Rollennummer, ... |
AW: Problem mit Group by in Access
Ich glaube, die benötige ich zum Teil. Meine 1. Tabelle besteht aus folgenden Spalten: Materialrollen.[Mat-Nr], Materialrollen.Rollennummer, Materialrollen.DatumAb und die 2. Tabelle aus: Rollenlager.Rollennummer, Rollenlager.Lagerplatz. In der 2. Tabelle existieren die Datensätze nur, wenn die entsprechende Rollenlager.Rollennummer auf einem Lagerplatz liegt. Wenn sie verbraucht wir, dann wird dieser Datensatz gelöscht. Materialrollen.[Mat-Nr] und Materialrollen.DatumAb brauche ich, wegen des selects auch.
Gruß, Luckner |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz