PDA

Vollständige Version anzeigen : Abfrage event. über Kreuztabelle


tick
20.04.2009, 12:28
Hallo liebe Office Profis,

mich beschäftigt derzeit ein Problem, eventuell nur für mich, hoffentlich nicht für euch. Ich habe eine Excel Datei bekommen und möchte diese auswerten über Access.

Im Kopf stehen Schulnummer - Kurzname - Klasse - Jahrgangsstufe - Insgesamt
darunter kommen halt jeweils die Schulnummer und die entsprechenden Daten.
Jede schule hat eine Klassenstufe von 1- maximal 13.

In der Auswertung möchte ich eine Abfrage erstellen wo für jede Schule jeweils pro Jahrgangsstufe die Ingesamt Menge ausgegeben wird, sowie die Klassenanzahl (= wie viele Klassen je Jahrgangsstufe)

Ihr werdet sicherlich sofort erkennen wo mein Problem liegt. Bis auf die Ausgabe der Klassenanzahl pro Jahrgangsstufe habe ich über eine Kreuztabelle hinbekommen. Danach scheitere ich. Vielleicht hat von euch jemand eine Idee?

Danke euch.

Atrus2711
20.04.2009, 12:37
Hi,

ich würde auf die Exceldaten eine Abfrage setzen:
Jahrgangsstufe: Gruppe
Schülerzahl: Summe
Klasse: Gruppe (!)

Diese Abfrage sollte basis der Kreuztabelle sein. In der Kreuztabelle kannst du dann die Schüler summieren und die Klassen zählen (!).

Die Zwischenabfrage liefert durch ihre Satzanzahl die Klassenzahl pro Jahrgangsstufe.

HTH

PS: Spielt sich das in Hessen ab?

Anne Berg
20.04.2009, 12:44
Hallo, ich hätte da einen anderen Vorschlag:

Schulnummer - Kurzname - Jahrgangsstufe --> Gruppieren
Klasse --> Zählen
Insgesamt --> Summieren

Atrus2711
20.04.2009, 13:00
Die Funktion Anzahl bildet die Anzahl der nichtleeren Werte. Ich vermute, dass hier aber um die ANzahl der unterschiedlichen Werte geht (was ein SQL Server unter Count(Distinct Klasse) lösen würde). Ein Distint Count kann Access leider nicht, daher der Ansarz mit der Zwischenabfrage.

Aber wenn es gemeint war, wie Anne es löst, hat Anne recht :)

tick
20.04.2009, 14:25
Vielen Dank für die schnellen Antworten. Leider komme ich noch nicht wirklich damit zurecht.

Bei der Abfrage von Anne werden die gesamtzahl der Klassen je Schule gezählt, aber nicht wie viele in der 1. / 2. ... sind. Deshalb reicht das leider nicht.

Bei der Zwischenabfrage von Atrus komme ich leider nicht wirklich zurecht. Ich soll:

Jahrgangsstufe: Gruppe
Schülerzahl: Summe
Klasse: Gruppe (!)

auf die Excel Tabelle ausführen.
Das habe ich getan. Dann habe ich ein zusammengefasstes Werk. Soll ich daraus wieder eine Tabelle machen und dann wieder eine Abfrage?

LG

PS: Es bezieht sich nicht auf Hessen.

Anne Berg
20.04.2009, 14:36
... , aber nicht wie viele in der 1. / 2. ... sind. Das hätte sich eigentlich aus der Gruppierung nach Jahrgangsstufe ergeben sollen. :confused:

Atrus2711
20.04.2009, 14:50
Wenn Annes Tipp doch nicht reicht:
Ja, meine ABfrage ist nur ein Zwischenergebnis, welches du dann in einer weitere Abfrage auswertest. Diese zweite ABfrage ist dann eine Kreuztabellenabfrage, wo du Zeilen- und Spaltenfeld angeben kannst.

tick
20.04.2009, 18:31
Vielen Dank, ich versuche es morgen nochmal. Melde mich dann nochmal.

Schönen Abend.

tick
21.04.2009, 09:14
So ich habe jetzte folgende Darstellung:

Kopf

Schulnummer Kurzname Jahrgangsstufe Summe von Insgesamt Anzahl von Jahrgangsstufe

Darunter die Werte ... schonmal toll, vielen Dank.

Die Darstellung ist leider nicht die, dich ich brauche. Ich versuche es mal Bildlich zu machen.

Schulnummer | Schulname | Jahrgangsstufe 1 | Jahrgangsstufe 2 ... |
Schülerzahlen|Klassen | Schülerzahlen | Klassen

Ich hoffe es ist ersichtlich was ich meine. Die Jahrgangsstufen sollen jeweils in Schülerzahlen und Klassenzahlen aufgeschlüsselt werden. Schon eine Art Kreuztabelle. Leider kriege ich immer nur entweder Schülerzahlen als Spaltensumme oder die Klassenzahlen hin .. gibt es da einen Trick. Oder löse ich es gar mit einem Bericht? Danke euch.

Atrus2711
21.04.2009, 09:16
Zeig doch mal die SQL.
Das bisherige ist scheinbar keine Krueztabelle, sonst wären die Spaltenüberschriften "datenhaltig".

tick
21.04.2009, 09:32
SELECT [Schülerzahlen A].[Schulnummer], [Schülerzahlen A].[Kurzname], [Schülerzahlen A].[Jahrgangsstufe], Sum([Schülerzahlen A].[Insgesamt]) AS [Summe von Insgesamt], Count([Schülerzahlen A].[Jahrgangsstufe]) AS [Anzahl von Jahrgangsstufe]
FROM [Schülerzahlen A]
GROUP BY [Schülerzahlen A].[Schulnummer], [Schülerzahlen A].[Kurzname], [Schülerzahlen A].[Jahrgangsstufe];

Atrus2711
21.04.2009, 09:38
Naja, das ist keine Kreuztabelle. :)

Insgesamt sind doch die Tabelle und zwei (!) Abfragen beteiligt. Die Tabelle hat die Rohdaten, die erste Abfrage bereitet vor, und die zweite zeigt die Daten der ersten als Kreuztabellenabfrage.

Was du jetzt zeigst, ist die erste Abfrage. Baue halt die zweite. :)

tick
21.04.2009, 09:41
Wenn das alles so leicht wäre ... soll ich nun eine Abfrage erstellen für die Klassen und dann eine für die Schülerzahlen und kann aus beiden dann wieder eine machen?

tick
21.04.2009, 09:45
TRANSFORM Sum(Abfrage1.[Anzahl von Jahrgangsstufe]) AS [Summe von Anzahl von Jahrgangsstufe]
SELECT Abfrage1.Schulnummer, Abfrage1.Kurzname, Sum(Abfrage1.[Anzahl von Jahrgangsstufe]) AS [Summe von Anzahl von Jahrgangsstufe1]
FROM Abfrage1
GROUP BY Abfrage1.Schulnummer, Abfrage1.Kurzname
PIVOT Abfrage1.Jahrgangsstufe;


TRANSFORM Sum(Abfrage1.[Summe von Insgesamt]) AS [Summe von Summe von Insgesamt]
SELECT Abfrage1.Schulnummer, Abfrage1.Kurzname, Sum(Abfrage1.[Summe von Insgesamt]) AS [Summe von Summe von Insgesamt1]
FROM Abfrage1
GROUP BY Abfrage1.Schulnummer, Abfrage1.Kurzname
PIVOT Abfrage1.Jahrgangsstufe;


Ich habe ja für beide eine Abfrage als Kreutabelle erstellt, nur beides zusammen geht leider nicht.:(

Atrus2711
21.04.2009, 09:54
Moment, du willst zwei Wertfelder (Schülersummen und Klassenanzahlen) in der Kreuztabelle sehen? Sorry, das hatte ich so nicht verstanden.

Die Klassische Kreuztabelle kann nur ein Wertfeld.

Du kannst aber ausweichen auf die Pivotansicht der "vorbereitetenden" Abfrage, oder du analyisert das ganze per Excel (das sowohl als Zeile, Spalte und Wert je mehrere Felder aufnehmen kann).

Anne Berg
21.04.2009, 10:07
Hallo,

wenn die Optik nicht so wichtig ist, kannst du folgendermaßen beide Werte kombinieren:TRANSFORM Sum(Abfrage1.[Anzahl von Jahrgangsstufe]) & " " & Sum(Abfrage1.[Summe von Insgesamt]) AS [Zahlen von Jahrgangsstufe]
SELECT Abfrage1.Schulnummer, Abfrage1.Kurzname
FROM Abfrage1
GROUP BY Abfrage1.Schulnummer, Abfrage1.Kurzname
PIVOT Abfrage1.Jahrgangsstufe;Ansonsten bliebe noch ein Bericht zur Ausgabe der Auswertung.

Atrus2711
21.04.2009, 10:12
Halt, du hast nur Access 2000. Da gibt es die Pivotansicht noch nicht, und die Kreuztabelle kann halt nur ein Feld.

Da hilft dann doch nur Excel. Du kannst da aber dann direkt auf die Accesstabelle zugreifen.

Ein Bild, wie das ab Access 2003 als Pivotsicht möglich wäre; so ähnlich kann das Excel ab 2000 dann auch:

tick
21.04.2009, 10:22
Mensch danke, ihr seit klasse. Also Anne das sieht schon toll aus, leider möchte ich die Tabelle weiter bearbeiten. Wenn beides in einer Zelle steht ist das zwar erstmal schön, aber nicht sinnvoll. Aber was alles geht.

@Atrus: Ja leider nur 2000, aber genau sowas wäre schön gewesen. Problem erkannt. :)

Anne Berg
21.04.2009, 10:26
Was willst du an der Kreuztabelle "weiter bearbeiten"? Die Daten sind so oder so nicht änderbar.

tick
21.04.2009, 10:32
Zum Beispiel im Bericht dann genau dies ausgeben. Oder halt mit Excel weiterbearbeiten. Ziel war es aber eigentlich einen Bericht mit alle Schulen zu erstellen. Ca 40 untereinander.

Atrus2711
21.04.2009, 10:41
Also:

mit Access-2000-Bordmitteln geht es nur auf Annes Weg.

Wenn du Excel nutzen kannst/willst, kannst du in Excel auf die Accesstabelle zugreifen.

Bearbeitbar sind die Werte aber ohnehin nicht: SUmmen sind Summen, was willst du da ändern? Höchstens Copy and Paste... :entsetzt:

tick
21.04.2009, 10:45
Eigentlich muss ich nichts summieren, dass ist ja alles da. Hier geht es nur um eine grafische Auswertung bzw. Darstellung. Ich habe gehofft mit Access dies zu vereinfachen. Ist ja auch teilweise gelungen.

Atrus2711
21.04.2009, 10:54
Aber auch in Sachen Diagramm würde ich bei Excel bleiben. Die Accessdiagramme sind nicht so berühmt, und wenn es um zwei Wertfelder geht (= mglw. zwei y-Achsen) schon gar nicht.

Josef P.
21.04.2009, 10:58
Falls mit "Bearbeiten" das Bearbeiten der Daten gemeint ist:
Wenn du in der Kreuztabelle eindeutig auf den jeweiligen Datensatz des angezeigten Wertes kommt, wäre durchaus eine Änderung der Daten möglich.
Diese Änderung muss allerdings per VBA-Code durchgeführt werden.

Prinzip:
Als Datenbasis des Formulars eine ADODB-Recordset verwenden und bei diesem Recordset die Verbindung kappen. Damit werden die Daten im Recordset bearbeitbar. Per VBA musst du allerdings auf die Änderungen reagieren und in die Tabelle schicken. (Das Recordset mit der Kreuztabellen-Abfrage selbst kann das nicht durchführen.)


Falls nur selten etwas geändert werden musst, würde ich eher ein zusätzliches Bearbeitungsformular verwenden, das bei Doppelklick auf ein Textfeld o. ä. geöffnet wird und dann die Bearbeitung dieses Felder ermöglicht.

tick
21.04.2009, 12:45
Vielen Dank.

Ich werde mit Excel auswerten. Ihr habt recht, ist wohl das einfachste.

Vielen Dank nochmals.

Anne Berg
21.04.2009, 14:25
Hallo, ich habe hier noch einen Vorschlag für dich. Das Ergebnis könntest du in einem Bericht darstellen.

Abfrage "qry_schule01":SELECT "K" AS ID, schule, jahrgangsstufe, count(Klasse) AS gesamt from tbl_Schule
Group By "K", schule, jahrgangsstufe
UNION
SELECT "S" AS ID, schule, jahrgangsstufe, sum(Schüler) from tbl_Schule
Group By "S", schule, jahrgangsstufe;
Kreuztabellenabfrage:TRANSFORM Sum(qry_schule01.gesamt) AS [Der Wert]
SELECT qry_schule01.schule
FROM qry_schule01
GROUP BY qry_schule01.schule
PIVOT qry_schule01.jahrgangsstufe & "_" & ID
;Ich hoffe, du kommst trotz umbenannter Felder damit zurecht. ;)