Select count(distinct ...)

Hallo Wer-weiss-was-Gemeinde,

ich möchte in einer Access 2000 Datenbank eine Anfrage formulieren, die folgendermaßen aussehen soll:

SELECT D,Karte,COUNT(DISTINCT Code)
FROM Daten
GROUP BY D,Karte;

(Primärschlüssel in der Tabelle Daten sind D und Karte. Es soll angegeben werden, wie viele unterschiedliche Codes jeder Eintrag besitzt)

Das müsste ja in SQL-Syntax soweit stimmen, aber ich habe gelesen (und auch vorhin beim Ausprobieren festgestellt), dass Access die Formulierung COUNT DISTINCT nicht versteht.

Deshalb nun meine Frage: Wie kann ich die oben genannte Anfrage so umformulieren, dass Access etwas damit anfangen kann? z.B. mit einer Subquery und HAVING müsste es doch sicherlich funktionieren. Ich probiere aber schon ewig herum und komme nicht drauf.

Herzlichen Dank für Eure Hilfe bereits im Voraus.

Schöne Grüße
Kerstin

hallo kerstin

nur mal so nachgefragt:

wenn die felder (D+Karte) den unique key bilden
dann kann diese kombination ja nur einmal vorkommen
und deshälb wäre dann der count immer 1

stimmt das mit dem primärschlüssel?

oder liege ich da falsch?

ciao

christian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hoppla, nochmal genauer bzw. korrekter formuliert.
Hallo Christian,

Dankeschön für Deinen Hinweis. Du hast Recht, ich habe eine Angabe vergessen:
D und Karte sind lediglich 2 von den 3 Bestandteilen des Primärschlüssels.

Also mal ausführlicher: Die Tabelle Daten besteht aus den Spalten
D
Karte
TeilNr
Quelle
Ziel
Code

Primärschlüssel sind D und Karte und TeilNr.
Gruppiert werden soll nach D und Karte, wie es ja bereits in der Anfrage steht.

Schöne Grüße
Kerstin

hallo kerstin

nur mal so nachgefragt:
wenn die felder (D+Karte) den unique key bilden
dann kann diese kombination ja nur einmal vorkommen
und deshälb wäre dann der count immer 1

stimmt das mit dem primärschlüssel?
oder liege ich da falsch?

ciao
christian

SELECT D,Karte,COUNT(DISTINCT Code)
FROM Daten
GROUP BY D,Karte;

Hallo Kerstin,

wie wär’s damit?

SELECT D,Karte,COUNT(*)
FROM Daten
GROUP BY D,Karte;

Gruß
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

leider nicht
Hallo Matthias,

dankeschön für Deinen Vorschlag. Deine Query führt aber leider auch nicht zu dem gewünschten Ergebnis.

Ich möchte nämlich lediglich die verschiedenen (!) Einträge zu einer D/Karte-Kombination zählen (deshalb ja auch das DISTINCT). Deine Abfrage liefert aber leider die Anzahl aller Einträge, ungeachtet dessen ob sie voneinander verschieden sind.

Grüße
Kerstin

Hallo Kerstin,

wie wär’s damit?

SELECT D,Karte,COUNT(*)
FROM Daten
GROUP BY D,Karte;

Gruß
Matthias

Hi Kerstin,

irgendwie versteh ich nicht, was Du willst.

Wenn der Inhalt Deiner Tabelle angenommen so aussieht:

D Karte
1 A
1 B
1 B
2 A
2 A
2 A
2 B
3 A
3 A

dann käme bei meinem SQL folgendes raus:
D Karte Anzahl
1 A 1
1 B 2
2 A 3
2 B 1
3 A 2

Schreib doch mal, wie Deine Daten aussehen und wie Dein Ergebnis aussehen soll.

Gruß
Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ach noch was: Sortieren solltest Du die Tabelle schon vorher:

SELECT D,Karte,COUNT(*)
FROM Daten
ORDER BY D,Karte
GROUP BY D,Karte;

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Beispiel
Hallo Matthias,

ich erkläre es mal an dem von Dir gewählten Beispiel.
Die relevanten Spalten der Tabelle sehen dann so aus:

D Karte Code
1 A 1
1 B 1
1 B 1
2 A 1
2 A 2
2 A 2
2 B 1
3 A 1
3 A 2

Was ich nun mit meiner Anfrage rausbekommen möchte ist die Anzahl der verschiedenen(!) Codes pro D/Karte-Kombination. Das Ergebnis sollte also so aussehen:

D Karte COUNT(Code)
1 A 1
1 B 1
2 A 2
2 B 1
3 A 2

Und das ist nunmal nicht das gleiche Ergebnis wie bei Deiner Abfrage:

dann käme bei meinem SQL folgendes raus:
D Karte Anzahl
1 A 1
1 B 2
2 A 3
2 B 1
3 A 2

Ich denke, dass mein Anliegen mit folgender Query realisierbar sein sollte:

SELECT D,Karte,COUNT(DISTINCT Code)
FROM Daten
GROUP BY D,Karte;

Wie aber schonmal erwähnt, versteht Access diese Formulierung mit SELECT COUNT(DISTINCT…) nicht und deswegen suche ich nun eine andere (=Access-kompatible) Formulierung für diese Anfrage.

Ich hoffe jetzt wird es klarer, was ich eigentlich bezwecken möchte.
Auf jeden Fall schonmal Danke für Deine Bemühungen.

Grüße
Kerstin

Nur mal so
Hoch Lebe Oracle

Sql-Melina > select d, karte, count (distinct code)
2 from sqlr1
3 group by d, karte;

D K COUNT(DISTINCTCODE)


1 A 1
1 B 1
2 A 2
2 B 1
3 A 2

aber es geht auch in Access
select d,karte,count(*)
from (select distinct d,karte,code from daten)
group by d,karte;

ciao

christian

1 Like

Ja!
Hallo Christian,

das isses!

Ich bin zwar noch nicht dahintergestiegen, wie man auf diese Formulierung kommt, aber das soll jetzt wirklich mal nicht das Problem sein, denn: es klappt.

Ich habe das Ergebnis Deiner Formulierung an meinem Datensatz, der ja doch ein bisschen umfangreicher ist als die Beispieltabelle, stichprobenartig überprüft und alles war korrekt.

Damit hast Du mir den Donnerstag gerettet (und das bevorstehende Wochenende gleich mit).

Herzlichen Dank dafür und viele Grüße!
Kerstin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

mittlerweile versteh ich auch wieso es klappt(owT)
.