Vinzenz Mai: SQL Abfrage

Beitrag lesen

Hallo Susann,

ich möchte den Kunden herausfinden, der die meisten Einkäufe hat.

select max (Winner.Anzahl)
from (select count(kundennr) as Anzahl, kundennr, kundenname, Ort
from dbo.Vorgang, dbo.kunde
where Vorgang.kundenid = kunde.kundennr
group by kundennr, kundenname, Ort) as Winner

Das funktioniert und gibt mir die Anzahl der Einkäufe des Kunden mit der größten Menge aus.

Jetzt möchte ich "nur" noch den Kundennamen hinzufügen und das schaffe ich nicht.

dann benötigst Du eine korrelierte Unterabfrage, siehe z.B. </archiv/2008/1/t165377/#m1078290> oder </archiv/2006/7/t133015/#m861544>

  
SELECT  
    Winner.kundenname,  
    Winner.Anzahl  
FROM (  
    SELECT  
        COUNT(kundennr) Anzahl,  
        kundennr,  
        kundenname,  
        Ort  
    FROM             -- deinen impliziten schreibe ich in einen  
        dbo.Vorgang  -- expliziten Join um  
    INNER JOIN  
        dbo.kunde  
    ON  
        dbo.Vorgang.kundenid = dbo.kunde.kundennr  
    GROUP BY  
        kundennr,  
        kundenname,  
        Ort  
) Winner  
WHERE  
    Winner.Anzahl = (  
    SELECT  
        MAX(w.Anzahl)  
    FROM (  
        SELECT  
            COUNT(kundennr) Anzahl,  
            kundennr,  
            kundenname,  
            Ort  
        FROM  
            dbo.Vorgang  
        INNER JOIN  
            dbo.kunde  
        ON  
            dbo.Vorgang.kundenid = dbo.kunde.kundennr  
        GROUP BY  
            kundennr,  
            kundenname,  
            Ort  
    ) w                        -- wichtig: anderer Aliasname!  
)  

Durch Deinen temporären View sieht das halt nochmals etwas aufwendiger aus.
Nicht getestet, sollte aber das gewünschte liefern.

Freundliche Grüße

Vinzenz