PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anzahl Gruppen in denen eine Bed erfüllt ist


Roland Strunz
06.02.2006, 15:52:12
Hi,

ich würde gern eine Abfrage schreiben in der ich mir die Anzahl von Gruppen ausgeben lassen kann, in denen eine best. Bedingung erfüllt ist.

Tabelle: Id|Gruppe|Name

In der ersten Spalte steht eine Id, in der zweiten die Gruppenzugehörigkeit und in der dritten ein Name.

1|1|Tom
2|1|Stefan
3|1|Helmut
4|2|Helga
5|2|Tom
6|2|Tom
7|3|Reinhard

Der Name Tom kommt also sowohl in Gruppe 1 als auch 2 vor. In der dritten nicht. In der zweiten Gruppe sogar 2x. Das soll aber nur einmal gezählt werden. Ich will jetzt als Ergebnis für die Anzahl von Vorkommen von Tom in den Gruppen 2 haben.

Danke für eure Hilfe

Roland

xabbuh
06.02.2006, 16:27:17
Zum Beispiel hiermit:

SELECT COUNT(DISTINCT Gruppe) FROM tabelle WHERE Name = 'Tom';

Roland Strunz
06.02.2006, 17:00:38
Hi Danke,

ja genau so gehts, bei Access bekomm ich da allerdings immer eine Fehlermeldung... Eine Ahnung wie ichs da hin bekomme...

Merci
Roland

JT
06.02.2006, 22:29:10
Weil Jet-SQL != MySQL, für Jet musst du a) einen Alias für die berechnete Spalte verwenden und b) gibt es kein Count(Distinct). Dafür behilft man sich mit einer VBA-Funktion.

1) Neues Modul erstellen
2) Code kopieren:

Public Function fCount(Feld As String, Tab As String, Optional Krit As String) As Variant
Dim strSQL As String
strSQL = "SELECT Count(" & Feld & ") FROM " & Tabelle
If Not IsMissing(Kriterium) Then
strSQL = strSQL & " WHERE " & Kriterium
End If

fCount = Nz(DBEngine(0)(0).OpenRecordset(strSQL, dbOpenSnapshot)(0), 0)
End Function
3) Im VBA-Editor auf Extras/Verweise gehen und dort einen Hacken bei Microsoft DAO 3.x machen
4) Modul unter mdlfCount speichern
5) Abfrage so erstellen

SELECT
Gruppen,
[Name],
fCount("*", "Tabelle", "Gruppe = " & Gruppe & " AND [Name] = '" & [Name] & "'") As AnzahlNamenGruppen
FROM
Tabelle
GROUP BY
Gruppen,
[Name]

Ansonsten gibts in Jet auch Unterabfragen:

SELECT
Gruppen,
[Name],
(SELECT Count(*) FROM Tabelle As Q WHERE Q.[Name] = Tabelle.Name AND Q.Gruppe = Tabelle.Gruppe) As AnzahlGruppenNamen
FROM
Tabelle
GROUP BY
Gruppe,
[Name]

Oder du schaust dir mal in der Hilfe DCount() an, aber das ist "bäh".

HTH

Roland Strunz
23.02.2006, 17:07:41
Äh,

sorry JT! Hab vergessen mich zu bedanken! Vielen Dank für Deine Hilfe! Auf die Lösung wäre ich nie im Leben gemommen!

Roland

JT
23.02.2006, 19:13:39
Falls du weitere Probleme mit VBA/Jet-SQL hast, kann ich dir das www.ms-office-forum.net ans Herz legen. www.spotlight.de soll auch toll sein, aber die Form des Forums gefällt mir nicht.

@Admins Bitte nicht steinigen, sondern einfach die Links löschen, wenn ihr Fremdwerbung nicht mögt ;)