Entwickler-Ecke

Datenbanken - Frage zu DISTINCT in SQL Anweisung


ibh_compucat - Sa 14.08.10 19:05
Titel: Frage zu DISTINCT in SQL Anweisung
Hallo,

ich komm' mit DISTINCT nicht klar, folgendes Problem:
Ich habe eine (SQL) Tabelle mit den Feldern 'AUFTRAG', 'KARTON' und 'TEIL'. Zu einem Auftrag können mehrere Kartons gehören und in jedem Karton können mehrere Teile liegen.
Pro Teil wird ein Datensatz in der Tabelle erzeugt. Klappt alles - wunderbar.
Nun möchte ich abfragen (ADO-Query), welche Kartons zu einem bestimmten Auftrag gehören, also

??? SELECT DISTINCT AUFTRAG, KARTON FROM AUFTRAGSTABELLE ???

und als Ergebnis sehen:

Auftrag Karton
_______________

001 10000
001 10001
001 10002

ich bekomme aber:

Auftrag Karton
_______________

001 10000
001 10000
001 10000
001 10000
001 10001
001 10001
001 10001
001 10002

weil z.B. im Karton 10000 4 Teile lagen, also pro Teil (Datensatz) ein Ergebnis. Das ist doch nicht DISTINCT???

wie muß ich den SQL String umformulieren?

Gruß ibh_compucat

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.


Gerd Kayser - Sa 14.08.10 20:20

user profile iconibh_compucat hat folgendes geschrieben Zum zitierten Posting springen:

SQL-Anweisung
1:
SELECT DISTINCT AUFTRAG, KARTON FROM AUFTRAGSTABELLE                    
Schau Dir das einmal an: http://support.microsoft.com/kb/181479/en-us
Vielleicht löst das Dein Problem.


Xentar - So 15.08.10 02:55


SQL-Anweisung
1:
Select distinct(Karton) from Auftragstabelle where Auftrag = 001                    


?

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.


ibh_compucat - So 15.08.10 12:08

erst mal Danke für Eure Antworten.

@Gerd: ich verstehe das leider nicht so richtig, was die Microsoft-Leute so vorschlagen.

@xentar: wenn ich das eingebe:

SQL-Anweisung
1:
2:
SELECT DISTINCT (KARTON) FROM AUFTRAGSTABELLE
WHERE AUFTRAG = 001

dann kommt eine Exeption:
Im Projekt XYZ.exe ist eine Exception der Klasse EDatabaseError aufgetreten.
Meldung: 'ADOQuery1: Das Feld 'AUFTRAG' wurde nicht gefunden'.
Prozess wurde angehalten . . . u.s.w.
Offensichtlich kann die Query nur auf solche Felder zugreifen, die vor dem 'FROM' deklariert sind.
Aber was kann ich da tun?
Wäre GROUP BY eine Möglichkeit? Ich hab natürlich schon probiert, krieg das aber auch nicht in Funktion.

Gruß ibh_compucat

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.


Gerd Kayser - So 15.08.10 12:42

user profile iconibh_compucat hat folgendes geschrieben Zum zitierten Posting springen:
@Gerd: ich verstehe das leider nicht so richtig, was die Microsoft-Leute so vorschlagen.

Microsoft schlägt dort zwei Lösungen vor. Die einfachste dürfte wohl sein, bei ADO-Connection CursorLocation auf adUseServer zu setzen.
Probiers einfach mal aus. Ist doch nur eine Zeile Code.


ibh_compucat - So 15.08.10 13:16

Danke an Gerd, ich habe das probiert und es funktioniert!

Aber auch die andere Möglichkeit habe ich noch einmal getestet und den Fehler gefunden.
Der SQL String muss lauten:


SQL-Anweisung
1:
SELECT DISTINCT (KARTON), AUFTRAG FROM AUFTRAGSTABELLE WHERE AUFTRAG = 001                    


dann läuft alles wie gewünscht.

Noch einmal meinen Dank an Euch beide!

Gruß ibh_compucat

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.