i’m an absolute newbie in SQL and want to add up all the Sums of the Articles * ordered amount to a final prize. I tried to calculate the Articles * amount to the “Gesamtpreis” and then the Method SUM() to sum up all the “Gesamtpreis”. Dont worry, the SQL-Code is auto-generated by Access.
Main Problem:
[Einzelpreis]*[Anzahl] AS Gesamtpreis, SUM(Gesamtpreis) AS FinalPreis
Whole Code:
SELECT Kunden.Kundennr , Kunden.Nachname , Kunden.Vorname , Kunden.Straße , Kunden.PLZ , Kunden.Ort , Bestellung.Bestellnr , Bestellung.Bestelldatum , Bestelldetails.Artikelnr , Bestelldetails.Anzahl , Artikel.Artikelname , Artikel.Einzelpreis , Artikel.Hersteller , [Einzelpreis]/119*19 AS MwStPreis , [Einzelpreis]-[MwStPreis] AS EinzelpreisNetto , [Einzelpreis]*[Anzahl] AS Gesamtpreis , SUM(Gesamtpreis) AS FinalPreis FROM Kunden INNER JOIN ( (Artikel INNER JOIN Bestelldetails ON Artikel.Artikelnr = Bestelldetails.Artikelnr ) INNER JOIN Bestellung ON Bestelldetails.Bestelldetailnr = Bestellung.Bestelldetailnr ) ON Kunden.Kundennr = Bestellung.Kundennr;
Advertisement
Answer
When using an aggregate function (e.g. SUM()
, COUNT()
, etc.), you need to group by every other field which is not part of an aggregate function in that query. For your case, it would be like this:
SELECT Kunden.Kundennr , Kunden.Nachname , Kunden.Vorname , Kunden.Straße , Kunden.PLZ , Kunden.Ort , Bestellung.Bestellnr , Bestellung.Bestelldatum , Bestelldetails.Artikelnr , Bestelldetails.Anzahl , Artikel.Artikelname , Artikel.Einzelpreis , Artikel.Hersteller , [Einzelpreis]/119*19 AS MwStPreis , [Einzelpreis]-[MwStPreis] AS EinzelpreisNetto , [Einzelpreis]*[Anzahl] AS Gesamtpreis , SUM([Einzelpreis]*[Anzahl]) AS FinalPreis FROM Kunden INNER JOIN ( (Artikel INNER JOIN Bestelldetails ON Artikel.Artikelnr = Bestelldetails.Artikelnr ) INNER JOIN Bestellung ON Bestelldetails.Bestelldetailnr = Bestellung.Bestelldetailnr ) ON Kunden.Kundennr = Bestellung.Kundennr GROUP BY Kunden.Kundennr , Kunden.Nachname , Kunden.Vorname , Kunden.Straße , Kunden.PLZ , Kunden.Ort , Bestellung.Bestellnr , Bestellung.Bestelldatum , Bestelldetails.Artikelnr , Bestelldetails.Anzahl , Artikel.Artikelname , Artikel.Einzelpreis , Artikel.Hersteller , [Einzelpreis]/119*19 , [Einzelpreis]-[MwStPreis]
EDIT: If you are looking for the SUM of all entries to appear on each entry, then you could do that like this:
SELECT Kunden.Kundennr , Kunden.Nachname , Kunden.Vorname , Kunden.Straße , Kunden.PLZ , Kunden.Ort , Bestellung.Bestellnr , Bestellung.Bestelldatum , Bestelldetails.Artikelnr , Bestelldetails.Anzahl , Artikel.Artikelname , Artikel.Einzelpreis , Artikel.Hersteller , [Einzelpreis]/119*19 AS MwStPreis , [Einzelpreis]-[MwStPreis] AS EinzelpreisNetto , [Einzelpreis]*[Anzahl] AS Gesamtpreis , [Total].[Total] AS [FinalPreis] FROM (((((Kunden INNER JOIN Bestellung ON Kunden.Kundennr = Bestellung.Kundennr) INNER JOIN Bestelldetails ON Bestellung.Bestelldetailnr = Bestelldetails.Bestelldetailnr) INNER JOIN Artikel ON Bestelldetails.Artikelnr = Artikel.Artikelnr) INNER JOIN ( SELECT Kunden.Kundennr, 1 AS [Key] FROM Kunden ) AS [Joiner] ON Kunden.Kundennr = [Joiner].Kundennr) INNER JOIN ( SELECT 1 AS [Key], SUM(Artikel.Einzelpreis*Bestelldetails.Anzahl) AS [Total] FROM Artikel INNER JOIN Bestelldetails ON Artikel.Artikelnr = Bestelldetails.Artikelnr ) AS [Total] ON [Joiner].[Key] = [Total].[Key])
EDIT: If you are looking for the sum of entries for each Kunden:
SELECT Kunden.Kundennr , Kunden.Nachname , Kunden.Vorname , Kunden.Straße , Kunden.PLZ , Kunden.Ort , Bestellung.Bestellnr , Bestellung.Bestelldatum , Bestelldetails.Artikelnr , Bestelldetails.Anzahl , Artikel.Artikelname , Artikel.Einzelpreis , Artikel.Hersteller , [Einzelpreis]/119*19 AS MwStPreis , [Einzelpreis]-[MwStPreis] AS EinzelpreisNetto , [Einzelpreis]*[Anzahl] AS Gesamtpreis , [Total].[Total] AS [FinalPreis] FROM ((((Kunden INNER JOIN Bestellung ON Kunden.Kundennr = Bestellung.Kundennr) INNER JOIN Bestelldetails ON Bestellung.Bestelldetailnr = Bestelldetails.Bestelldetailnr) INNER JOIN Artikel ON Bestelldetails.Artikelnr = Artikel.Artikelnr) INNER JOIN ( SELECT Kunden.Kundennr, SUM(Artikel.Einzelpreis*Bestelldetails.Anzahl) AS [Total] FROM (((Kunden INNER JOIN Bestellung ON Kunden.Kundennr = Bestellung.Kundennr) INNER JOIN Bestelldetails ON Bestellung.Bestelldetailnr = Bestelldetails.Bestelldetailnr) INNER JOIN Artikel ON Bestelldetails.Artikelnr = Artikel.Artikelnr) GROUP BY Kunden.Kundennr ) AS [Total] ON Kunden.Kundennr = [Total].Kundennr)
EDIT: If you are looking for the sum of entries for each Kunden and Bestellung:
SELECT Kunden.Kundennr , Kunden.Nachname , Kunden.Vorname , Kunden.Straße , Kunden.PLZ , Kunden.Ort , Bestellung.Bestellnr , Bestellung.Bestelldatum , Bestelldetails.Artikelnr , Bestelldetails.Anzahl , Artikel.Artikelname , Artikel.Einzelpreis , Artikel.Hersteller , [Einzelpreis]/119*19 AS MwStPreis , [Einzelpreis]-[MwStPreis] AS EinzelpreisNetto , [Einzelpreis]*[Anzahl] AS Gesamtpreis , [Total].[Total] AS [FinalPreis] FROM ((((Kunden INNER JOIN Bestellung ON Kunden.Kundennr = Bestellung.Kundennr) INNER JOIN Bestelldetails ON Bestellung.Bestelldetailnr = Bestelldetails.Bestelldetailnr) INNER JOIN Artikel ON Bestelldetails.Artikelnr = Artikel.Artikelnr) LEFT JOIN ( SELECT Kunden.Kundennr, Bestellung.Bestellnr, SUM(Artikel.Einzelpreis*Bestelldetails.Anzahl) AS [Total] FROM (((Kunden INNER JOIN Bestellung ON Kunden.Kundennr = Bestellung.Kundennr) INNER JOIN Bestelldetails ON Bestellung.Bestelldetailnr = Bestelldetails.Bestelldetailnr) INNER JOIN Artikel ON Bestelldetails.Artikelnr = Artikel.Artikelnr) GROUP BY Kunden.Kundennr, Bestellung.Bestellnr ) AS [Total] ON Kunden.Kundennr = [Total].Kundennr AND Bestellung.Bestellnr = [Total].Bestellnr)