Hi,
Eventuell hilft GROUP BY:
SELECT tKunde.Kunde_ID, tKunde.KundeNummer, tKunde.KundeFirma,
tKunde.KundeVorname, tKunde.KundeName,
COUNT(tVerkauf.ref_Kunde) AS AnzahlBestellungen,
MAX(tVerkauf.Datum) AS LetzteBestellungAm
FROM tKunde LEFT JOIN tVerkauf
ON tKunde.Kunde_ID = tVerkauf.ref_Kunde
GROUP BY tKunde.Kunde_ID, tKunde.KundeNummer, tKunde.KundeFirma,
tKunde.KundeVorname, tKunde.KundeName
ORDER BY AnzahlBestellungen
JOIN verkn�pft Tabellen. Bei INNER JOIN ("Normal") w�rden Kunden ohne Bestellung nicht
in der Liste auftauchen.
Bei LEFT JOIN sollten alle Datens�tze aus der linken Tabelle in Ergebnis enthalten
sein. Wenn es keinen entsprechenden Datensatz in der rechten Tabelle gibt, werden
Felder aus der rechten Tabelle mit NULL-Werten besetzt. COUNT z�hlt NULL nicht mit.
GROUP BY: �hnlich wie bei DISTINCT werden nur unterschiedliche Datens�tze ausgegeben,
zus�tzlich k�nnen jedoch Aggregartfunktionen auf die dadurch entstehenden Gruppen
angewendet werden. Alle auszugebenden Felder im SELECT m�ssen auch in GROUP BY stehen,
in GROUP BY k�nnen jedoch noch mehr Felder stehen. Funktionen k�nnen nicht bei GROUP
BY stehen.
SELECT Vorname, COUNT(*) AS HaeufikeitVomVornamen
FROM Kunden
GROUP BY Vornamen
WHERE muss vor dem GROUP BY stehen und bezieht sich immer auf die Datens�tze.
Zus�tzlich kann HAVING auf eine Gruppe angewandt werden:
SELECT Vorname, COUNT(*) AS HaeufikeitVomVornamen
FROM Kunden
GROUP BY Vornamen
HAVING COUNT(*)>3
Gibt nur die Vornamen mit H�ufigkeit aus, die mehr als drei mal vorkommen.
Damit k�nnten z.B. die "Gro�kunden" ausgesiebt werden.
HINWEIS: SQL-Implementierungen sind zum Teil sehr unterschiedlich, ob genau diese
L�sung bei Access funkt wei� ich nicht. Eventuell m�ssen die Aggregatfunktionen bei
ORDER BY wiederholt werden z.B. "ORDER BY LetzteBestellungAm" durch "ORDER BY
MAX(tVerkauf.Datum)" ersetzt werden.
Sorry, war gerade in Lehrer-Stimmung :)
Frohes Eier-Suchen!
Heiko Richler
Systemingenieur
Georg-Simon-Ohm-Fachhochschule N�rnberg
Fachbereich Informatik
http://web1.informatik.fh-nuernberg.de/heiko.richler/
> -----Urspr�ngliche Nachricht-----
> Von: Barbara Bumm [mailto:[EMAIL PROTECTED]]
> Gesendet: Sonntag, 31. M�rz 2002 10:41
> An: ASP Diskussionsliste fuer Anfaenger
> Betreff: [aspdebeginners] Problem mit SQL-Abfrage
>
>
> Hallo Liste,
>
> ich m�chte mir f�r eine Online Shop-Verwaltung eine Liste
> aller Kunden mit
> Anzahl der Bestellungen und letztem Bestelldatum ausgeben
> lassen. Dazu frage
> ich folgende zwei Tabellen einer Access-DB ab:
> tKunde --> enth�lt u.a. die Felder
> Kunde_ID, KundeNummer, KundeName, KundeVorname, KundeFirma
> tVerkauf--> enth�lt u.a. die Felder
> Verkauf_ID, ref_Kunde, ref_Artikel, Datum
>
> Die SQL-Abfrage mache ich mit
> sSQL = "SELECT tKunde.Kunde_ID, tKunde.KundeNummer,
> tKunde.KundeFirma,"
> sSQL = sSQL & " tKunde.KundeVorname, tKunde.KundeName,"
> sSQL = sSQL & " (SELECT COUNT(tVerkauf.ref_Kunde) FROM tVerkauf "
> sSQL = sSQL & "WHERE tKunde.Kunde_ID = tVerkauf.ref_Kunde) AS
> AnzahlBestellungen,"
> sSQL = sSQL & " (SELECT MAX(tVerkauf.Datum) FROM tVerkauf "
> sSQL = sSQL & "WHERE tKunde.Kunde_ID = tVerkauf.ref_Kunde) AS
> LetzteBestellungAm"
> sSQL = sSQL & " FROM tKunde "
>
> Ergibt als Ausgabe
> KundeNummer | KundeFirma | KundeName | KundeVorname |
> AnzahlBestellungen |
> LetzteBestellungAm
>
> Das klappt soweit auch. Nun das Problem: Ich m�chte die
> Ausgabe der Liste
> mit ORDER BY wahlweise nach verschiedenen Feldern sortieren lassen.
> Das funktioniert aber nicht bei AnzahlBestellungen und
> LetzteBestellungAm.
> ORDER BY Anzahl Bestellungen ergibt die Fehlermeldung "Too
> few parameters.
> Expected 1"
> ORDER BY 5 ergibt zwar keine Fehlermeldung, aber auch nicht
> die gew�nschte
> Sortierung.
> Dasselbe gilt f�r LetzteBestellungAm.
>
> Wer kann mir helfen? Muss ich die SQL-Abfrage anders
> stricken? Habe schon
> mit Left Join herumexperimentiert, aber leider erfolglos.
>
> Vielen Dank im voraus & sch�ne Ostern,
>
> Barbara Bumm
>
>
> | Oft Gefragtes: http://www.aspgerman.com/aspgerman/faq/
> | [aspdebeginners] als
> [EMAIL PROTECTED] subscribed
> | http://www.aspgerman.com/archiv/aspdebeginners/ = Listenarchiv
> | Sie knnen sich unter folgender URL an- und abmelden:
> |
> http://www.aspgerman.com/aspgerman/listen/anme> lden/aspdebeginners.asp
>
| Oft Gefragtes: http://www.aspgerman.com/aspgerman/faq/
| [aspdebeginners] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdebeginners/ = Listenarchiv
| Sie knnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdebeginners.asp