查询不包括指定的表达式

时间:2015-01-10 16:49:23

标签: sql database ms-access

我一直在MS Access中遇到问题。我想添加一个collumn但我收到了一个错误。 “您的查询不包含指定的表达式'BorgA'作为聚合函数的一部分。”

我正在使用此查询:

 SELECT 
    SUM(A.TotaalPrijs) As TotaalPrijs,
    A.AutoNR,
    A.AutoKlasse,
    MAX(A.Factuur.Dagen) as Dagen,
    A.Prijzen.dag125KM as PrijsPerDag,
    A.Prijzen.ExtraKM As PrijsPerExtraKM,
    A.Factuur.FactuurNR,
    A.Factuur.KlantNR,
    A.Factuur.Begindatum,
    A.Factuur.Einddatum,
    A.Factuur.Borg,
    Gegevens.voorletters,
    Gegevens.tussenvoegsel,
    Gegevens.achternaam,
    Gegevens.straatnaam,
    Gegevens.huisNR,
    Gegevens.Postcode,
    Gegevens.rekeningNR,
    Gegevens.Plaats,
    A.KMteVEEL,
    B.BorgA
    FROM

    (SELECT Factuur.Dagen, Factuur.AutoNR AS carNR, autos.AutoNR, autos.Klasse AS AutoKlasse, Prijzen.Klasse, Prijzen.dag125KM, Prijzen.ExtraKM, (prijzen.dag125KM*Factuur.Dagen) AS MinPrijs, Factuur.FactuurNR, Factuur.KlantNR, Factuur.Begindatum, Factuur.Einddatum, Factuur.Borg, (KMteVEEL*[Prijzen]![ExtraKM])+([Prijzen]![dag125KM]*[Factuur]![Dagen]) AS TotaalPrijs, Gegevens.voorletters, Gegevens.tussenvoegsel, Gegevens.achternaam, Gegevens.straatnaam, Gegevens.huisNR, Gegevens.Postcode, Gegevens.rekeningNR, Gegevens.Plaats, IIf([Factuur]![EindKMStand]-[Factuur]![BeginKMStand]-([Factuur]![Dagen]*125) < 0, 0, [Factuur]![EindKMStand]-[Factuur]![BeginKMStand]-([Factuur]![Dagen]*125))  AS KMteVEEL
     FROM autos, Factuur, Prijzen, Gegevens
        WHERE (((Factuur.AutoNR)=Autos.AutoNR) And ((autos.Klasse)=Prijzen.Klasse) And ((Factuur.KlantNR)=Gegevens.KlantNR))

    ) AS A,
(SELECT  Prijzen.Borg as BorgA
FROM ((Prijzen 
     INNER JOIN Autos ON Autos.Klasse = Prijzen.Klasse)
     INNER JOIN Factuur ON Factuur.AutoNR = Autos.AutoNR)) AS B


    GROUP BY 
        A.AutoNR, A.AutoKlasse, A.Prijzen.dag125KM, A.Prijzen.ExtraKM, A.Factuur.FactuurNR, A.Factuur.KlantNR, A.Factuur.Begindatum, A.Factuur.Einddatum, A.Factuur.Borg, Gegevens.voorletters, Gegevens.tussenvoegsel, Gegevens.achternaam, Gegevens.straatnaam, Gegevens.huisNR, Gegevens.Postcode, Gegevens.rekeningNR, Gegevens.Plaats, A.KMteVEEL;

在我添加B.BorgA

之前,代码工作得很完美
(SELECT  Prijzen.Borg as BorgA
FROM ((Prijzen 
     INNER JOIN Autos ON Autos.Klasse = Prijzen.Klasse)
     INNER JOIN Factuur ON Factuur.AutoNR = Autos.AutoNR)) AS B

部分。 有什么方法可以让它运作? 我已经尝试在GROUP BY中添加B.BorgA,但这并没有给我正确的结果。 如何让它运作的任何其他方式?

谢谢,

2 个答案:

答案 0 :(得分:0)

由于您没有条件限制A子查询和B子查询之间的联接,因此您获得了笛卡尔积。您的子查询已加入Prijzen,因此只需将其添加到SELECTGROUP BY列表中即可。还有其他清理工作:

  SELECT 
        SUM(TotaalPrijs) As TotaalPrijs,
        AutoNR,
        AutoKlasse,
        MAX(Dagen) as Dagen,
        dag125KM as PrijsPerDag,
        ExtraKM As PrijsPerExtraKM,
        FactuurNR,
        KlantNR,
        Begindatum,
        Einddatum,
        Borg,
        voorletters,
        tussenvoegsel,
        achternaam,
        straatnaam,
        huisNR,
        Postcode,
        rekeningNR,
        Plaats,
        KMteVEEL,
        BorgA
        FROM     (SELECT p.Borg as BorgA,f.Dagen, f.AutoNR AS carNR, a.AutoNR, a.Klasse AS AutoKlasse, p.Klasse, p.dag125KM, p.ExtraKM, (p.dag125KM*f.Dagen) AS MinPrijs, f.FactuurNR, f.KlantNR, f.Begindatum, f.Einddatum, f.Borg, (KMteVEEL*[Prijzen]![ExtraKM])+([Prijzen]![dag125KM]*[Factuur]![Dagen]) AS TotaalPrijs, g.voorletters, g.tussenvoegsel, g.achternaam, g.straatnaam, g.huisNR, g.Postcode, g.rekeningNR, g.Plaats, IIf([Factuur]![EindKMStand]-[Factuur]![BeginKMStand]-([Factuur]![Dagen]*125) < 0, 0, [Factuur]![EindKMStand]-[Factuur]![BeginKMStand]-([Factuur]![Dagen]*125))  AS KMteVEEL
                  FROM autos a
                  INNER JOIN Factuur f  ON a.AutoNR = f.AutoNR
                  INNER JOIN Prijzen p  ON a.Klasse = p.Klasse
                  INNER JOIN Gegevens g ON f.KlantNR = g.KlantNR    

       ) AS sub
GROUP BY AutoNR,
        AutoKlasse,
        dag125KM, 
        ExtraKM,
        FactuurNR,
        KlantNR,
        Begindatum,
        Einddatum,
        Borg,
        voorletters,
        tussenvoegsel,
        achternaam,
        straatnaam,
        huisNR,
        Postcode,
        rekeningNR,
        Plaats,
        KMteVEEL,
        BorgA

我还删除了您过时的JOIN语法并添加了别名。子查询甚至不是必需的,但如果你删除它,你必须适当地更改别名。

答案 1 :(得分:0)

您已在选择列表中选择了非汇总字段B.BorgA,但您错过了将其添加到B.BorgA中的group by

Select ...
       ....
GROUP  BY A.AutoNR,
          A.AutoKlasse,
          A.Prijzen.dag125KM,
          A.Prijzen.ExtraKM,
          A.Factuur.FactuurNR,
          A.Factuur.KlantNR,
          A.Factuur.Begindatum,
          A.Factuur.Einddatum,
          A.Factuur.Borg,
          Gegevens.voorletters,
          Gegevens.tussenvoegsel,
          Gegevens.achternaam,
          Gegevens.straatnaam,
          Gegevens.huisNR,
          Gegevens.Postcode,
          Gegevens.rekeningNR,
          Gegevens.Plaats,
          A.KMteVEEL,
          B.BorgA;  -- Missed