PDA

Vollständige Version anzeigen : Summieren in einer Abfrage


Whatever-Roy
07.07.2006, 08:50
Hallo Zusammen!

Ich als Access-Neuling hab ein Problem bei einer Abfrage, die den Fortschritt eines Projektes pro Monat in Verschiedenen Verdichtungstufen wiedergeben soll.

Die Tabelle "Dynamic" hat folgende Spalten:

Commission_No, Discipline, Executor, Month, Prog real, Manhours calc
Wobei die ersten 4 den Schlüssel darstellen, Prog real stellt den Fortschritt in % auf der untersten Ebene dar.

Um den Fortschritt nun pro Discipline zu verdichten muss er gewichtet werden, in dem die Summe[Manhours calc] pro [Executor] durch die Summe [Manhours calc] pro Discipline dividiert und mit [Prog real] multipliziert werden.

der Code zu dieser Abfrage (die auch die richtigen ergebnisse liefert) lautet wie folgt:

SELECT M.Commission_No, M.Discipline, M.executor, M.Month, M.[Prog real], M.[Manhours calc],

(Select [Prog real] From Dynamic as K Where K.Month =M.Month and K.executor=M.executor and K.Commission_No = M.Commission_No and K.Discipline = M.Discipline )*
(Select Sum([Manhours calc]) From Dynamic as K Where K.executor=M.executor and K.Commission_No = M.Commission_No and K.Discipline = M.Discipline )/
(Select Sum([Manhours Calc]) from Dynamic as K Where K.Commission_No = M.Commission_No and K.Discipline = M.Discipline) AS [Prog disc]

FROM Dynamic AS M

ORDER BY M.Commission_No, M.Discipline, M.executor, M.Month;

im Anhang ist ein Bild des Abfrageergebnisses.

Wenn ich nun versuche diese Abfrage zu gruppieren, um den Fortschritt Pro discipline und Monat anzuzeigen kommt immer die selbe Fehlermeldung:

...executor nicht teil der aggregatfunktion

Wer kann mir helfen?
vielen Dank schon mal Dominik

Alwin80
07.07.2006, 08:59
Hallo Whatever-Roy,

ich vermute mal, dass Du an den Code irgendwo ein "GROUP BY discipline, Month" angehangen hast. Da muss einfach noch ein Komma hinter und damit auch executor in die Gruppierung eingeschlossen werden. Dann solte das gehen.

Gruß
Alwin80

Worf1001
07.07.2006, 09:07
Hallo,

zeige doch mal den Code wie Du gruppierst.

Whatever-Roy
07.07.2006, 09:32
Hi!

hier ist der Code der Gruppierung, die Gruppierung hab ich allerdings bisher immer in der Entwurfsansicht gemacht.
Also der Code:

SELECT M.Commission_No, M.Discipline, First(M.executor) AS ErsterWertvonexecutor, M.Month, Sum(M.[Prog real]) AS [SummevonProg real], Sum(M.[Manhours calc]) AS [SummevonManhours calc],

Sum((Select [Prog real] From Dynamic as K Where K.Month =M.Month and K.executor=M.executor and K.Commission_No = M.Commission_No and K.Discipline = M.Discipline )*

(Select Sum([Manhours calc]) From Dynamic as K Where K.executor=M.executor and K.Commission_No = M.Commission_No and K.Discipline = M.Discipline )/

(Select Sum([Manhours Calc]) from Dynamic as K Where K.Commission_No = M.Commission_No and K.Discipline = M.Discipline)) AS [Prog disc]

FROM Dynamic AS M
GROUP BY M.Commission_No, M.Discipline, M.Month
HAVING (((M.Commission_No)=[Formulare]![F_Report_Filter]![Kombinationsfeld0]) AND ((M.Discipline)=[Formulare]![F_Report_Filter]![Kombinationsfeld2])
ORDER BY M.Commission_No, M.Discipline, M.Month;

Woran liegts?
und danke für die schnellen Antworten

Alwin80
07.07.2006, 09:50
Hallo Whatever-Roy,

also wie schon gesagt:

SELECT M.Commission_No, M.Discipline, First(M.executor) AS ErsterWertvonexecutor, M.Month, Sum(M.[Prog real]) AS [SummevonProg real], Sum(M.[Manhours calc]) AS [SummevonManhours calc],

Sum((Select [Prog real] From Dynamic as K Where K.Month =M.Month and K.executor=M.executor and K.Commission_No = M.Commission_No and K.Discipline = M.Discipline )*

(Select Sum([Manhours calc]) From Dynamic as K Where K.executor=M.executor and K.Commission_No = M.Commission_No and K.Discipline = M.Discipline )/

(Select Sum([Manhours Calc]) from Dynamic as K Where K.Commission_No = M.Commission_No and K.Discipline = M.Discipline)) AS [Prog disc]

FROM Dynamic AS M
GROUP BY M.Commission_No, M.Discipline, M.Month, M.executor
HAVING (((M.Commission_No)=[Formulare]![F_Report_Filter]![Kombinationsfeld0]) AND ((M.Discipline)=[Formulare]![F_Report_Filter]![Kombinationsfeld2])
ORDER BY M.Commission_No, M.Discipline, M.Month;

Könnte sogar auch in die Order by Klausel müssen.

Gruß
Alwin80

Whatever-Roy
07.07.2006, 10:23
Hallo nochmal,

hab den code jetzt ausprobiert, aber das Abfrage ergebnis ist exakt, das gleiche wie im Screenshot oben. Ist ja auch eigentlich logisch, wenn ich nach allen Schlüsselkrieterien gruppiere, dann ist das doch so als würd ich gar nicht gruppieren.

aber vielleicht hab ich das Problem noch nicht eindeutig beschrieben:

Das Abfrageergebnis soll die Summe von [Prog disc] (also die werte der executors addieren) pro Commission, Discipline, und Month wiedergeben.

Bitte nicht aufgeben! Bin Dankbar für jeden Tipp
MFG
Dominik

Paul.Ostermeier
07.07.2006, 12:03
wieso differnzierst DU nach Executor, wenn Du den zusammengefasst haben willst ?
First(M.executor) AS ErsterWertvonexecutor ... Where K.executor=M.executor

falls ich Dich richtig verstanden habe - sollte der Executor nicht in der Abfrage auftauchen ... ?

MfG
Paul