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)