Ergebnistabelle umbauen

Huith

Benutzer
Beiträge
5
Hallo zusammen,
ich habe eine Access-Datenbank zur Schulverwaltung. In einer Abfrage werden folgende Werte dargestellt:
Spalte FachID für das Unterrichtsfach,
Spalte LTID für die Art des Leistungsnachweises,
Spalte PersonID für die Schüler,
Spalte Anzahl als Count-Funktion für die Anzahl der gebuchten Leistungsnachweise,
Spalte MittelLT als Sum-Funktion mit Count-Funktion
Als Ergebnis soll u.a. eine Tabelle mit Spalten für die Fächer und darin Spalten für die Mittelwerte der Personen stehen.
Ich behelfe mir bisher mit dem schrittweisen Errechnen und Speicherung in temporären Tabellen, indem ich den Datenbestand nach Personen, Fächern durchlaufe und die Zwischenergebnisse speichere und wieder weiter verarbeite.
Das ist nicht sehr elegant und dauert auch lange (Laufzeit).
Kann mir jemand einen Tipp geben, wie das anders umgesetzt werden kann?
Vielen Dank für Hinweise!
Gruß Michael
 
Werbung:
Hallo
Stichwort "Aggregatfunktionen AVG oder SUM"
Stichwort "Group by"
das sollte in die richtige Richtung weisen.
 
Wäre auch gut mal die orginal Abfrage zu posten, also als SQL Code und bitte nicht als Bild :)

Ein GROUP BY scheint es ja schon zu geben wenn count() zum Einsatz kommt.
 
Vielen Dank für die schnelle Antwort.
Hier der SQL-Code des beschriebenen Schrittes:
SELECT tblLeistungsnachweis.FachID as FachID, tblLeistungsnachweis.LeistungstypID as LTID , tblNoten.PersonID as PersonID,Count(tblNoten.Note) AS Anzahl,fix(Sum(tblNoten.Note) / Anzahl *100)/100 as MittelLTJF FROM (tblLeistungsnachweis LEFT JOIN tblNoten ON tblLeistungsnachweis.LeistungsnachweisID = tblNoten.ArbeitID) LEFT JOIN tblFach ON tblLeistungsnachweis.FachID = tblFach.FachID WHERE (Nz([Note], 0)> 0 AND tblFach.JahrgangID = 88) GROUP BY tblLeistungsnachweis.FachID,tblLeistungsnachweis.LeistungstypID, tblNoten.PersonID
 
Hallo MDDaniel,
danke für deinen Tip, mich interessiert dein Screenshot mit der Artikelliste. Wie erstellst du die Tabelle? Das ist es, was ich suche!
Gruß
Michael
 
Entschuldigt bitte!
Als ich die Antwort vom MDDaniel aufrief, wurde direkt über seinem Post eim Screenshot eines Formulars mit Artikelnummern und weiteren Kopfspalten mit Artkelmerkmalen und für jede dieser Spalten nochmals Unterspalten angezeigt.
Jetzt beim erneuten Aufruf war dieser (wohl aus irgendwelchen Gründen wie Werbeeinblendung oder ähnliches) nicht mehr da. D,er Typ mit der Round-Funktion hilft mir; dadurch wird meine Abfrage etwas einfacher.
Mein eigentliches Ziel wäre eine Abfrage oder Kombination aus Abgragen und temporären Tabellen eine Darstellung zu erhalten, die so aufgebaut ist:
Spalte 1 = PersonID
Spalte 2 im Kopf FachID des erste Faches,
Spalte X im Kopf FachID des Xten Faches
Die Spalte 2 soll dann Unterspalten für die Mittelwerte der Leistungsnachweistypen des ersten Faches auflisten.
In der Endfassung sollen dann natürlich die FachIDs, LeistungstypIDs und PersonIDs durch Verknüpfung mit den entsprechenden Tabellen dargestellt werden.
Die Daten liegen im ersten Schritt wie oben beschrieben als Datensätze in folgender Form vor:
Satz1: PersonID, FachID, Leistungstyp1ID, Anzahl und Mittelwert der Noten dieser Kombination,
...
Satzx: Person Y, FachIDZ,LeistungstypIDxx, Anzahl und Mittelwert ZZ
Bisher habe ich mir so beholfen, dass ich in mehrren Schritten eine Ergebnistabelle gefüllt habe mit
1. PersonID,
2. Tabelle ergänzt mit Spalten für die FachIDs und dabei die Daten mit einer Distinct-Abfrage aus der zugrunde liegenden Afrage per INSERT bzw: UPDATE ergänzt: das gleiche sinngemäß mit den Liestungstypen.
Das Funktioniert grundsätzlich, ist jedoch sehr langsam.
Deshalb meine Frage und Bitte: Kann ich diesen ganzen Ablauf vereinfachen oder auch: wie bekomme ich bestimmte Merkmale meiner Ausgangstabelle in die Form einer Matrix, die ich dann wieder als neue Tabelle speichern kann?
Ich hoffe, mein Anlegen jetzt verständlicher gemacht zu haben.
Liebe Grüße und Danke für eure Geduld!
Michael
 
Also grundsätzlich kann man sagen, Datenbanken sind bei Mengenoperationen schnell.
Heißt soviel wie: es wird schnell gerechnet, schnell gelesen und schnell kombiniert.
Wobei Datenbanken schneller in der Performance einbrechen sind "Schreibarbeiten".
Um die Schnelligkeit der Datenbank auszunutzen kannst du normalerweise die Rechenoperationen bei der Auswertung machen ohne über temporäre Tabellen zu gehen.
Das bläht vielleicht das SQL Statement auf aber es beschleunigt aber den ganzen Ablauf normal sehr, weil du deine Hardware nicht mit parallelem Lesen und Schreiben beschäftigst.
Dein Statement in Post #4 passt soweit eh. Ich erkenne da auch keine temporäre Tabelle drinnen.
Was noch sein könnte ist das bei den einzelnen Tabellen die Indexe auf der Spalte mit den Verbindungskriterien fehlen. Das kann auch bremsen.
Gruß MDD

PS: Access-Abfragen oder Sichten sind keine temporäre Tabellen können deren Zweck aber oft ersetzen.
 
Vielleicht kannst du ja mal ein stark vereinfachtes Beispiel mit Ausgangsdaten und Zielaufbau geben. Wenn ich das richtig verstehe suchst du eine PIVOT Ansicht für die Fächer einer Person. PIVOT wird von Access scheinbar unterstützt sogar mit irgendwelchen Assistenz-Funktionen, leider ist das seit ca. 15 Jahren mein Hassobjekt Nr. 1 ;-)
 
Hallo zusammen, nacb einer längeren Pause bin ich wieder an meinem Projekt mit der Notenverwaltung dran.
Ich habe in der Anlage ein gekürztes Beispiel der Datenbank und die Struktur der gewünschteb Ergebnistabelle beigefügt.
Es wäre schön, wenn ihr mir mit Tipps weiterhelfen könnt, ob es abfragetechnisch eine elegantere und schnellere Lösung gibt als die Zwischenstufen über temporäre Tabellen.

Gruß
Michael
 

Anhänge

  • Notenverwaltung.zip
    56,3 KB · Aufrufe: 1
Werbung:
Solange es funktioniert wage ich gar nicht etwas in Access optimieren zu wollen, das erste wäre Access zu ersetzen. Es funktioniert in deiner Lösung wie du es haben willst?
 
Zurück
Oben