# MS Acces Abfragen



## testuser (27. April 2010)

```
SELECT Lokale.Lokalname, Spielautomaten.AID, Count(Aktivitäten.JahrMonat) AS Aktivität1
FROM (Lokale INNER JOIN Spielautomaten ON Lokale.LID=Spielautomaten.SID) INNER JOIN Aktivitäten ON Spielautomaten.AID=Aktivitäten.AID
WHERE (((Lokale.Lokalname) Like [Quartal 1 des Lokals:])) and Aktivitäten.JahrMonat between 201001 and 201003
ORDER BY Lokale.Lokalname, Aktivitäen.JahrMonat;
```

"Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck <Name>(Lokale) nicht als Teil der Aggregatfunktion einschließt. (Fehler 3122)" (Fehlermeldung)

Ich hab schon gegoogled und ich weis grob was es ist aber ich bekomm es nicht hin. Ich bin seit 2 Wochen Teilweise mit dieser Abfrage beschäftigt. Wie muss ich den Aggregatfunktion setzten? Ich hoffe ihr könnt mir helfen!

MFG Gast


----------



## Yaslaw (27. April 2010)

Hab dein SQL mal umformatiert, damit man es besser lesen kann

```
SELECT 
	Lokale.Lokalname, 
	Spielautomaten.AID, 
	Count(Aktivitäten.JahrMonat) AS Aktivität1
FROM 
	(Lokale 
	INNER JOIN Spielautomaten 
		ON Lokale.LID=Spielautomaten.SID) 
	INNER JOIN Aktivitäten 
		ON Spielautomaten.AID=Aktivitäten.AID
WHERE 
	Lokale.Lokalname Like [Quartal 1 des Lokals:] 
	and Aktivitäten.JahrMonat between 201001 and 201003
ORDER BY 
	Lokale.Lokalname, 
	Aktivitäen.JahrMonat;
```

Du hast im SELECT-Teil ein COUNT(). COUNT() ist eine Aggreagtionsfunktion oder auch Group-Fumktion gennant. Diese funktioniert in einem GROUP BY.
Dieser GROUP BY hast du aber nicht..

Versuch mal das folgende

```
SELECT 
	Lokale.Lokalname, 
	Spielautomaten.AID, 
	Count(Aktivitäten.JahrMonat) AS Aktivität1
FROM 
	(Lokale 
	INNER JOIN Spielautomaten 
		ON Lokale.LID=Spielautomaten.SID) 
	INNER JOIN Aktivitäten 
		ON Spielautomaten.AID=Aktivitäten.AID
WHERE 
	Lokale.Lokalname Like [Quartal 1 des Lokals:] 
	and Aktivitäten.JahrMonat between 201001 and 201003
GROUP BY 
	Lokale.Lokalname, 
	Spielautomaten.AID 
ORDER BY 
	Lokale.Lokalname, 
	Aktivitäen.JahrMonat;
```


----------



## testuser (27. April 2010)

Hi yaslaw und alle anderen User,
Danke das du so schnell geantwortet hast! Wie hast du den Code so Formatiert
Also zu dem was du geschrieben hast, ich hab des mal als neue Abfrage gemacht und ich konnte das Lokal aussuchen(schon mal perfekt), doch dann hat es mir nen Fehler gebracht, ok es ist nicht ganz ein Fehler in Zeile 19 fehlt ein t in Aktivitäten. Also hab ich dieses t gesetzt und es kam folgende Meldung:
" Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Aktivitäten.JahrMonat' nicht als Teil der Aggregatfunktion einschließt.

Was mich jetzt verwirrt: Nehme ich das T raus kommt eine Parameterabfrage! Schreibe ich in diese "Aktivitäten.JahrMonate" funktionirt das ganze bis auf das nur 1 Automat kommt und es sollten eigentlich 2-3 sein. Wäre super, wenn ihr mir weiter helfen könnten und wir erst mal das Problem mit der Abfrage lösen und dann das mit der Anzahl. Sonst kommen wir durcheinander!


Ich freu mich auf eure Meldungen =)
Testuser


----------



## Yaslaw (27. April 2010)

Als SQL im Forum schreiben:
[code=sql]SELECT ...[/code]

Ansonsten formatieren:
MS Access ist da eine wahre Katastrophe. Ich habe den Code in einen Texteditor kopiert und Zeilenumbrüche sowie Tabulatoren verwendet um ihn leserlich zu machen

Das t fehlt wirklich, dass muss da rain.

Hm.. sehe grad, dass ich die JahrMonat im GROUP BY habe und die AID nicht.

Was macht die AID? zu was gehört sie?
Jenchdem machen einige Punkte im SQL so wenig Sinn


----------



## testuser (27. April 2010)

Hab hier mal nen Screen der Beziehungen:
http://www.2page.eu/userdaten/08438808/bilder/alles_moegliche/beziehungen2.jpg

Die Aid ist die Automatennummer, durch die der Automat eindeutig einem Lokal und seiner Aktivität zugeordnet ist.
Ist meine erste DB von daher bin ich in Sachenstrucktur einer DB nicht ganz taub, wenn wer was zu mir sagt *G*


----------



## testuser (27. April 2010)

Sorry für den Dopple Pos, aber ich hab was interessantes =)
Lässt man Aktivitäten.JahrMonat weg und setzt dafür Spieleautomaten.AID bei GROUP BY ein funktioniert es!
Danke!
Jetzt hab ich noch das Problem das mir nur ein Automat angezeigt wird? Obwohl es bei dem Beispiel das ich ausgeführt habe 2 sind, was könnte da hinterstecken?


----------



## testuser (28. April 2010)

Hi @ll,

Ich hab dieses mir unerklärbare Problem gelöst, eher durchzufall, da ich die Abfrage etwas verfeinert habe, bzw einfach nur ne andere Tabelle dazu und nen neuen Abfrage punkt und ich bekomme alle Automaten angezeigt. Steuern hab ich mit ausgerechnet und sowie eine Abfrage mit allen Werten für einen Serienbrief erstellt.
Mir ist jetzt noch eine Frage regelrecht entgegen gesprungen =)

Ich will ja net immer meine Abfragen für jedes Jahr umschreiben, wie kann ich als anstelle von between 201001 and 201003 .
Ist between fähig mit Platzhaltern wie "*" zu arbeiten? 
Ich probier und google nebenbei
Im voraus schon mal danke


----------



## testuser (4. Mai 2010)

Thema closed!


----------

