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

Antwort per Email an