Entwickler-Ecke

Datenbanken - MS Access Distinct für ein Feld aber alle Felder ausgeben?


Delete - Mo 26.06.06 09:10
Titel: MS Access Distinct für ein Feld aber alle Felder ausgeben?
Hallo,
ich habe eine Tabelle (Access 2000), Zugriff über Delphi ADO Komponenten.
Die Tabelle hat folgende Felder:

Name, Klemmen, Bedingung, sollmin, sollmax, gruppe

Die Sensoren können mit verschiedenen Werten mehrfach vorkommen. Anzeigen lasse ich das Ganze in einem DBGrid.
Nun mein Problem. Ich möchte das jeder Sensor nur einmal auftaucht.
Wenn ich eine SQL Abfrage wie folgt mache:


SQL-Anweisung
1:
SELECT DISTINCT name from Sensoren WHERE gruppe="Abgas"                    


funktioniert das auch, aber ich bekomme auch nur das Feld "name"
Wenn ich es so mache:


SQL-Anweisung
1:
SELECT DISTINCT name, Klemmen, Bedingung, sollmin, sollmax, gruppe from Sensoren WHERE gruppe="Abgas"                    


bekomme ich alle Felder, aber ich bekomme alle Sensoren die sich irgendwo in der Tabelle unterscheiden. Ich möchte aber das jeder Sensor nur einal auftaucht.

Kann mir jemand helfen, bin noch ein SQL Neuling


crowley - Mo 26.06.06 09:35

morgen... versuch es doch mit einem Group By


SQL-Anweisung
1:
2:
3:
4:
SELECT name, Klemmen, Bedingung, sollmin, sollmax, gruppe 
  FROM Sensoren 
 WHERE gruppe="Abgas" 
GROUP BY name


Delete - Mo 26.06.06 09:46

Hallo,

funktioniert leider auch nicht! Es kommt eine Fehlermeldung:

Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck nicht als Teil der Aggregatfunktion einschließt.

Frank


jasocul - Mo 26.06.06 10:03


SQL-Anweisung
1:
2:
3:
4:
SELECT name, Klemmen, Bedingung, sollmin, sollmax, gruppe 
  FROM Sensoren 
 WHERE gruppe="Abgas" 
GROUP BY name, Klemmen, Bedingung, sollmin, sollmax, gruppe

Einfach die Fehlermeldung umsetzen. :wink:


Delete - Mo 26.06.06 22:32

@jasocul
Hallo, auch das funktioniert nicht.
Ich bekomme das gleiche Ergebnis wie bei der Abfrage mit Distinct.

Frank


mkinzler - Mo 26.06.06 22:36


SQL-Anweisung
1:
SELECT DISTINCT s1.name, s2.Klemmen, s2.Bedingung, s2.sollmin, s2.sollmax, s2.gruppe from Sensoren s1, Sensoren s2 WHERE s1.gruppe="Abgas" and s2.name = s1.name;                    


Delete - Di 27.06.06 08:29

Erstmal Danke an alle die Helfen wollten, aber Leider führt auch letzte Abfrage nicht zum Erfolg.
Ich habe jetzt unzählige Sachen probiert, in diversen Büchern nachgesehen und Google durchforstet! Aber nichts gefunden. Es muss doch eine Möglichkeit geben, eine solche Abfrage durchzuführen.

Wäre schön, wenn noch einer eine Idee hätte


jasocul - Di 27.06.06 08:41

Deine Anforderung ist falsch.
Beispiel:
Du willst jeden Sensor nur einmal bekommen. Ein Sensor kommt aber bei zwei verschiedenen Namen vor. Trotzdem wills du die Namen angezeigt bekommen.
Welcher Name soll denn angezeigt werden, wenn der Sensor nur einmal erscheinen darf?


Delete - Di 27.06.06 09:01

Du hast Recht, daran habe ich gar nicht gedacht, weil es eigentlich egal ist welchen der Datensätze ich bekomme. Sie dienen nur jeweils als Grundlage zum Exportieren. Also würde es reichen, wenn ich jeweils den ersten Datensatz bekäme in der ein bestimmter Sensor auftaucht.
Ich möchte im Prinzip eine Abfrage mit wie mit:


SQL-Anweisung
1:
SELECT DISTINCT Sensor FROM Sensoren WHERE Gruppe = "Abgas"                    


Von jedem Datensatz der dabei rauskommt, möchte ich aber auch alle anderen Felder


jasocul - Di 27.06.06 09:28

Nur mal als Beispiel:

SQL-Anweisung
1:
2:
3:
4:
SELECT sensor, max(name), max(Klemmen), max(Bedingung), min(sollmin), max(sollmax), max(gruppe)
  FROM Sensoren 
 WHERE gruppe="Abgas" 
GROUP BY sensor

Wenn es egal ist was drin steht, musst du nur die anderen Felder mit Aggregat-Funktionen aufrufen. Welche dann für deinen Fall die richtige ist, musst du selbst bestimmen.


Delete - Di 27.06.06 09:46

Super :dance: Jetzt hat es endlich geklappt.

Danke :zustimm: