2017-09-26 1 views
-1

auszuführen Wenn ich versuche, diese SQL-SELECT-Anweisung in Microsoft Access ich eine Fehlermeldung auszuführen:Microsoft Acces einen Fehler msg wirft bei dem Versuch, einen SQL-SELECT

SELECT (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) AS Barwert 
    , tblKunden.Firma, Count(tbl.BestellungID) 
FROM (tblBestellungen 
INNER JOIN tblBestelldetails 
    ON tblBestellungen.BestellungID = tblBestelldetails.BestellungID) 
INNER JOIN tblKunden 
    ON tblBestellungen.KundeID = tblKunden.KundeID; 

Es funktioniert jedoch nicht, wenn ich das hinzufügen Count(tbl.BestellungID) Feld in die SELECT-Anweisung. Außerdem weiß ich, dass ich es später durch BestellungID gruppieren musste, aber ich versuchte es und es behob mein Problem nicht.

Die seltsame Sache ist, wenn ich die Count(tbl.BestellungID) es sagt, hinzufügen, dass

Der Parameter (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) AS Barwert funktioniert nicht, weil es keine Aggregationsfunktion ist.

Weiß jemand, wie ich das beheben kann?

+1

Sie müssen nach allen nicht aggregierten Feldern gruppieren. 'GROUP BY (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) , tblKunden.Firma' kann nicht von Barwert gruppiert werden, da dieser Alias ​​der Gruppe aufgrund der Reihenfolge der Operationen einer select-Anweisung nicht bekannt ist. (FROM, Joins, Gruppieren nach, Auswählen, Haben, Sortieren nach) – xQbert

+1

Im Allgemeinen möchten Sie * nicht nach Feldern gruppieren, die Sie in einer Aggregatfunktion verwenden. Normalerweise möchten Sie nach anderen Feldern gruppieren. –

Antwort

3

Sie müssen nach allen nicht aggregierten Feldern gruppieren.

(tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) ist kein Aggregat, es sei denn, Sie fügen eine Summe (oder ein anderes Aggregat) hinzu, also müssen Sie nach derselben Formel gruppieren, die in der Auswahl enthalten ist. Der Alias ​​in der Aggregation kann nicht verwendet werden, da der Alias ​​zu dem Zeitpunkt nicht bekannt ist, zu dem die Gruppe durch von der DB-Engine ausgewertet wird. Sie müssen also die Formel in die Gruppe aufnehmen.

SELECT (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) AS Barwert 
    , tblKunden.Firma 
    , Count(tblBestellungen .BestellungID) 
FROM (tblBestellungen 
INNER JOIN tblBestelldetails 
    ON tblBestellungen.BestellungID = tblBestelldetails.BestellungID) 
INNER JOIN tblKunden 
    ON tblBestellungen.KundeID = tblKunden.KundeID 
GROUP BY (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) 
     , tblKunden.Firma 

Vielleicht müssen Sie auch aggregieren Barwert .. Es sieht aus wie Sie eine 1-M-1-Beziehung zwischen tblBestellungen-tblBestelldetails haben - tblKunden.

Also müssen wir vielleicht nur die Details und Gruppen von firma aggregieren.

SELECT sum(tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) AS Barwert 
    , tblKunden.Firma 
    , Count(tblBestellungen.BestellungID) 
FROM (tblBestellungen 
INNER JOIN tblBestelldetails 
    ON tblBestellungen.BestellungID = tblBestelldetails.BestellungID) 
INNER JOIN tblKunden 
    ON tblBestellungen.KundeID = tblKunden.KundeID 
GROUP BY tblKunden.Firma 

Oder .... vielleicht erzwingen Sie nicht die Integrität der Datenbank und müssen die IDs unterscheiden?

SELECT (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) AS Barwert 
    , tblKunden.Firma 
    , Count(distinct tblBestellungen.BestellungID) 
FROM (tblBestellungen 
INNER JOIN tblBestelldetails 
    ON tblBestellungen.BestellungID = tblBestelldetails.BestellungID) 
INNER JOIN tblKunden 
    ON tblBestellungen.KundeID = tblKunden.KundeID 
GROUP BY (tblBestelldetails.Einzelpreis * tblBestelldetails.Anzahl) 
     , tblKunden.Firma 
+0

Vielen Dank der Fehler nicht mehr aktzeptiert! Aber hast du eine Idee, warum es die falsche Anzahl von Bestellungen auf den Graf zurückgeben könnte? Ich habe versucht, nur die Menge an "Bestellungen" immer mit dieser Auswahl und es funktioniert: SELECT COUNT (tblBestellungen.BestellungID) VON tblBestellungen INNER JOIN tblBestelldetails ON tblBestellungen.BestellungID = tblBEstelldetails.BestellungID GROUP BY tblBestellungen.BestellungID; Also wie kann ich das in die Hauptauswahl implementieren? – FabianE

+0

Ohne ein besseres Verständnis der Tabellen und was Sie versuchen zu erreichen, ist die einzige Option, die ich sehen kann, "count (distinct BestellungID)" Wahrscheinlich ist die eine zu viele Beziehung zwischen Bestellungen und Bestdetails ist das Aufblasen der Zählung; mit distinct zählen wir nur einmalige bestellungsIDs für das firma. Jetzt möchten Sie vielleicht auch die Formel in der Gruppe entfernen und eine Summe verwenden ... Ich gebe ein Beispiel. – xQbert

+0

Danke sososo mutch. Die erste Option hat perfekt funktioniert! – FabianE

Verwandte Themen