查询不包括指定的表达式 [英] Query does not include the specified expression

查看:235
本文介绍了查询不包括指定的表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在使用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.wisgs,
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)和((autos.Klasse)= Prijzen.Klasse)和((Factuur.KlantNR)= Gegevens.KlantNR))


(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,但是did not给了我正确的结果。

解决方案

div>

由于您没有标准限制您的 A 子查询和 B 子查询之间的联接笛卡尔积。您的子查询已经加入 Prijzen 所以只需将其添加到 SELECT GROUP 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,
邮政编码,
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,[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,
邮政编码,
rekeningNR,
Plaats,
KMteVEEL,
BorgA

code> JOIN 语法和已添加的别名。子查询甚至没有必要,但如果您删除了子查询,则必须适当更改别名。


I've been stuck with a problem in MS Access. I am trying to add a collumn but I got a error. "Your query does not include the specified expression 'BorgA' as part of an aggregate function."

I am using this Query:

 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;

The code worked perfect before I added the B.BorgAand the

(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

Part. Is there any way how to get it working? I've tried adding B.BorgA in the GROUP BY but that didnt gave me the correct result. Any other way how to get it working?

Thanks,

解决方案

Since you had no criteria to limit the join between your A subquery and B subquery you were getting a Cartesian product. Your subquery already joins to Prijzen so just add that into the SELECT and GROUP BY lists. Also other cleanup:

  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

I also eliminated your outdated JOIN syntax and added aliases. The subquery isn't even necessary, but you'd have to change aliases appropriately if you eliminated it.

这篇关于查询不包括指定的表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆