首页 > 解决方案 > 文章奖品的 SQL SUM

问题描述

我是 SQL 的绝对新手,我想将所有文章的总和 * 订购金额加起来作为最终奖品。我尝试计算 Articles * 的数量为“Gesamtpreis”,然后计算方法 SUM() 来总结所有“Gesamtpreis”。别担心,SQL 代码是由 Access 自动生成的。

主要问题:

[Einzelpreis]*[Anzahl] AS Gesamtpreis, SUM(Gesamtpreis) AS FinalPreis

完整代码:

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;

标签: sqlms-access

解决方案


使用聚合函数(例如SUM()COUNT()等)时,您需要按该查询中不属于聚合函数的所有其他字段进行分组。对于您的情况,它将是这样的:

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]

编辑:如果您正在寻找出现在每个条目上的所有条目的总和,那么您可以这样做:

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])

编辑:如果您正在寻找每个 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)

编辑:如果您正在寻找每个 Kunden 和 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)

推荐阅读