Sortieren nach berechneten Variablen möglich?

redwing78

Mitglied
Hallo allerseits,
ich habe die statistischen Daten einer Fussballmannschaft. In einer Gesamtansicht werden alle Spiele bzw. Tore aller Saisonen zusammengezählt und auch ordnungsgemäß ausgegeben. Wie kann ich die Tabelle nach den berechneten Werten sortieren bzw. wie ist dies in der Datenbank am einfachsten zu bewerkstelligen?
Danke - vlg redwing78
 
Mit einer SQL Abfragen. Wie diese konkret aussieht hängt von der Datenbanktabelle ab.
Abgefähr so:
SQL:
SELECT Mannschaftsname, Count(TabellenKey) As AnzahlSpiele, SUM(Tore) As SummeTore, SUM(GegenTore) As SummeGegentore, SUM(Tore)-SUM(Gegentore) As Tordifferenz 
FROM TabelleSpiele
GROUP BY Mannschaftsname
ORDER BY SUM(Tore)-SUM(Gegentore) DESC
 
Hi! Bei meiner tabelle handelt es sich um Spielerdaten - es werden jede Saison Spiele und Tore gezählt und nun sollen alle Spiele und Tore eines Spielers sortierbar ausgegeben werden. Ich habs nun mit COUNT probiert - Meine SQL-Anwesiung:

Code:
SELECT Nachname, Vorname, COUNT(S0102Spiele+S0203Spiele+S0304Spiele+S0405Spiele+S0506Spiele+S0607Spiele) AS GesSpiele, COUNT(S0102Tore+S0203Tore+S0304Tore+S0405Tore+S0506Tore+S0607Tore) AS GesTore FROM Spieler WHERE Erste=TRUE ORDER BY Nachname,Vorname

Erhalte aber eine Fehlermeldung:Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Nachname' nicht als Teil der Aggregatfunktion einschließt.
Was ist los? Danke für die Hilfe! lg redwing78
 
Kannst du bitte mal deine Tabellenstruktur posten ?

Wenn du Aggregatfunktionen verwendest, also SUM (Summe), COUNT (Anzahl) usw. müssen alle Felder ohne Aggregatfunktionen in der GROUP BY Klause auf gezählt werden. D.h. in deinem Fall GROUP BY NACHNAME, VORNAME.

Count ermittelt nur die Anzahl der zusammengefassten Datensätze, wenn du eine Summe erhalten möchtest verwende SUM für Summe.
 
Hi, meine Tabelle sieht folgendermaßen aus (vereinfacht):
SpielerID (AutoWert)
Nachname (Text)
Vorname (Text)
S0506Spiele (Zahl)
S0506Tore (Zahl)
S0607Spiele (Zahl)
S0607Tore (Zahl)

Meine Abfrage lautet nun folgend:
Code:
strSQL = "SELECT SpielerID, Nachname, Vorname, SUM(S0102Spiele+S0203Spiele+S0304Spiele+S0405Spiele+S0506Spiele+S0607Spiele) AS GesSpiele, SUM(S0102Tore+S0203Tore+S0304Tore+S0405Tore+S0506Tore+S0607Tore) AS GesTore FROM Spieler WHERE Erste=TRUE GROUP BY SpielerID,Nachname,Vorname ORDER BY " & strSort & ""

Definition strSort:
Code:
strSort = Request.QueryString("sort")
if strSort = "" then strSort = "Nachname,Vorname" %>

Die Tabelle wird korrekt ausgegeben, d.h. die Gesamtzahl der Spiele und Tore stimmt
Code:
<% Response.Write objRS("GesSpiele") %>
bzw.
Code:
<% Response.Write objRS("GesSpiele") %>

Das Problem liegt nun im Sortieren. Wenn ich im SQL-Statement ORDER BY Nachname,Vorname angebe, wir die Tabelle zwar ausgegeben, aber kann natürlich nicht sortiert werden. Wenn ich angebe
Code:
 [...] ORDER BY " & strSort & ""
erscheint ein fehler: Microsoft JET Database Engine- Fehler '80040e10'
Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

Was ist da los? Die Variable strSort wurde ja definiert!
Danke - lg redwing78
 
Zuletzt bearbeitet:
Jedes Spiel, soweit ich das richtig verstanden habe, in eine extra Spalte zu schreiben macht nicht wirklich Sinn.
Eine Aufteilung wie folgend wäre, meines Erachtens, sinnvoller:
SpielerId, Name, Spiel, Tor
Die Abfrage würde dann wie folgend aussehen:
SQL:
       SELECT Name, Count(Spiel) as AnzahlSpiele, Sum(Tore)
       FROM Tabelle
       GROUP BY Name

In deiner Abfrage darfst du nicht vergessen zu gruppieren:
SQL:
SELECT 
   Nachname, 
   Vorname, 
   COUNT(S0102Spiele+S0203Spiele+S0304Spiele+S0405Spiele+S0506Spiele+S060Spiele) AS GesSpiele, 
   SUM(S0102Tore+S0203Tore+S0304Tore+S0405Tore+S0506Tore+S0607Tore) AS GesTore 
FROM Spieler 
WHERE Erste=TRUE 
GROUP BY Nachname, Vorname
ORDER BY Nachname,Vorname
Mal davon abgesehen, weiss ich nicht wo du Vorname und Nachname herbekommst, da sie nicht in der Tabellen Struktur vorhanden sind.
 
Zuletzt bearbeitet von einem Moderator:
Letzter Eintrag editiert ?

redwing78 hat gesagt.:
..
erscheint ein fehler: Microsoft JET Database Engine- Fehler '80040e10'
Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

Was ist da los? Die Variable strSort wurde ja definiert!
Danke - lg redwing78
Das sieht eher nach einen anderen Problem aus. Anscheindend hast du einen Tippfehler bei einer Feldbezeichnung (Spalte).
Unter Access ist es so das nicht vorhandene Spaltenbezeichnungen als Parameter interpertiert werden. Überprüfe bitte nach Schreibfehlern.
 
Hi, danke für die vielen Infos.
Meine datenbank umfaßt schon ca. 600 Spieler mit persönl. Daten-eine eigene Tabelle mit Mannschaften gibts auch schon, ich glaub das wär mir jetzt zuviel Aufwand, das umzuändern.

Beim Sortieren kommt ja nur die Fehlermeldung, wenn ich anstelle
ORDER BY Nachname,Vorname folgendes schreibe
ORDER BY " & strSort & ""

In anderen ASP-Dokumenten mach ich das auch so und es funktioniert.
Zur Kontrolle ist die Ausgabedatei unter folgender URL zu finden:
http://www.fckitz.at/1mannschaft/hall_of_fame.asp

Danke - Gruß redwing78
 
iilon hat gesagt.:
hallo, wie kann ich hier denn mal eine frage loswerden?
Zu diesem Thema? Dann einfach die Frage hier einstellen.
Ansonsten einen neue Thread im richtigen Forum eröffnen und bitte den Titel sinnvoll wählen. Am besten vorher die Netiquette lesen.

@redwing78
Bei sortierung nach Aggregatfunktionen musst das Order Statment genauso wählen, wie für die Spalte
Bsp.:
SQL:
ORDER BY COUNT(Spiele)
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück