Hallo Freunde, ich versuche mich mit einem SQL Thema auseinander zu setzen.
Ziel ist(siehe BILD wegen bezeichnungen):
(http://img5.fotos-hochladen.net/uploads/tabelle39i4s8gjbua.jpg)
test1 - test6 sind 6 verschiedene Personen, sie sind in der Datenbank/Tabelle erfasst. manche kommen nur einmal vor und manche öfters. ok. nun.
Mein Query soll mir dann 3 Zahlen ausrechnen:
- 1 Zahl soll mir sagen: Wie viele Personen kommen nur 1 mal in der Tabelle vor.
- 2 Zahl soll mir sagen: Wie viele Personen kommen 2 bis 9 mal vor.
- 3 Zahl soll mir sagen: Wie viele Personen kommen mehr als 10 mal vor.
Frage:
Ist das überhaupt im SQL möglich? Wenn ja, könntet ihr mir eventuelle behilflich sein.
Mein Ansatz war (rein theoretisch):
SELECT Count([User]) AS [onetimeaccess], Count(*) AS [twotoninetimeaccess], Count([User]) AS [morethantentimeaccess]
FROM tbl_tetst;
aber klar, dieser Ansatz zählt nur jeweils die anzahl der Felder.
Würde mich über eine Antwort freuen. Vielen Dank
Hallo,
es gibt wahrscheinlich intelligentere Lösungen, aber im ersten Versuch könntest du eine gruppierte Abfrage erstellen, welche die Vorkommen der einzelnen User zählt:
Select user, Count(*) as AccessCount,
IIf(Count(*) = 1, 1, 0) As Once,
IIf(Count(*) > 1 And Count(*) < 10, 1, 0) As TwoToNine,
IIf(Count(*) > 10, 1, 0) As MoreThanTen
From tabelle
Group By user
und darauf aufbauend eine weitere Abfrage welche dir die Summen der Spalten liefert. *)
Damit bekommst du die nachgefragten 1x, 2-9x und >10x.
Fragt sich nur was aus denen wird, die genau 10 Mal dabei sind. ;D
*) ... merke gerade, dass das die Abfrage aufgrund der Gruppierung bereits von sich aus liefert!
Hallo MaggieMay,
danke das hat mich aufjedenfall schon mal weiter gebracht. Nun möchte ich den query noch mit Summe ergänzen.
Sprich dass es mir z.Bsp die Summe ausrechnet von der Spalte "Once"
(http://up.picr.de/27159142rg.jpg)
habe diesen code probiert:
SELECT user, Count(*) as AccessCount,
IIf(Count(*)=1,1,0) AS Once,
IIf(Count(*)>1 And Count(*)<10,1,0) AS TwoToNine,
IIf(Count(*)>10,1,0) AS MoreThanTen
FROM tabelle
GROUP BY User;
UNION
SELECT Once, SUM(Once) as OnceSum
FROM qry_tetst_useranalyse;
aber die Frage ist erkennt er das überhaupt - das Ergebnis von der ersten Ausführung und dann gleich den nächsten Schritt mit "Sum". Oder ist sogar der Union ansatz falsch.
Also mein Ziel war das die nächste Spalte die Summe von "once" anzeigt, die übernächste die Summe von "TwotoTen" usw.
PS: hab das mit der Zahl 10 geklärt :D war mein Fehler
Vielen Lieben Dank. MFG Kloso
Hallo,
mit einer Union-Abfrage ist das generell machbar, dazu musst du aber auf eine gespeicherte Abfrage zugreifen.
Der Code dazu sähe dann folgendermaßen aus:
SELECT user, AccessCount, Once, TwoToNine, MoreThanTen, 0 as Sortkz
From abf_UserAccess
Union
Select "Summen", Sum(AccessCount), Sum(Once), Sum(TwoToNine), Sum(MoreThanTen), 1
From abf_useraccess
Order By 6,1
Vielen Lieben Dank,
hat auch funktioniert. habe davor es etwas anders gelöst: Habe nämlich einen anderen Query erstellt der auf den Access query zugreift und darus die summen bildet. Sieht etwas sauberer aus wenn man dann die DB mit mehreren Tausenden einträgen hat :)
Lieben Gruß Kloso
ZitatHabe nämlich einen anderen Query erstellt der auf den Access query zugreift und darus die summen bildet.
Wo siehst du da den Unterschied zu meinem Vorschlag?
Zeig doch bitte auch deine Lösung dazu.
Hallo,
weis man, was die maximale Anzahl von Personen sein kann, mehr als 10 war klar, aber wie viel max. ?
Wenn das überschaubar bleibt, könnte man da eine Lösung über eine Zuordnungstabelle anstreben bzw. versuchen.
Zitat von: MaggieMay am Oktober 18, 2016, 11:03:07
ZitatHabe nämlich einen anderen Query erstellt der auf den Access query zugreift und darus die summen bildet.
Wo siehst du da den Unterschied zu meinem Vorschlag?
Zeig doch bitte auch deine Lösung dazu.
Habe es so gelöst:
(http://up.picr.de/27161416np.jpg)
War im Prinzip mein Ziel.
Der Code vom 2ten Query sieht so aus:
SELECT DISTINCTROW Sum([qry_tetst_useranalyse].[Once]) AS [One time], Sum([qry_tetst_useranalyse].[TwoToNine]) AS TwoToNine, Sum([qry_tetst_useranalyse].[MoreThanTen]) AS MoreThanTen
FROM qry_tetst_useranalyse;
Liebe Grüße
PS: Stehe schon nahe vor dem nächsten Problem, werde wahrscheinlich demnächst noch ein thema eröffnen. :) Mal schauen wie geduldigweit ich kommen werde.
Ok, wenn dir das reicht. Ich hatte dich so verstanden, dass du die Summenzeile unter den Einzelzeilen haben wolltest.
Zitat von: MaggieMay am Oktober 18, 2016, 17:44:34
Ok, wenn dir das reicht. Ich hatte dich so verstanden, dass du die Summenzeile unter den Einzelzeilen haben wolltest.
A ok, habe meinen Gedanken wohl falsch formuliert. Danke trotzdem.
Hallo Kloso,
Allerdings bleibt noch immer diese Frage
ZitatFragt sich nur was aus denen wird, die genau 10 Mal dabei sind. ;D
Falls du es brauchst und noch ändern willst
IIf(Count(*)>=10,1,0) AS MoreThanTengruss ekkehard
Hallo, danke es war ein denk fehler von mir. Habe die 10 jetzt integriert. Funktioniert super. :)