[Access] Summe und Parameterübergabe

T

trefixxx

Gast
Hallo zusammen,

ich habe eine Tabelle "HT_Betriebsnebenkosten", in welcher alle Kostenstellen aufgelistet und gemäß eines Eintrags in der Spalte KstArt (=Kostenart) verschiedenen Kategorien zugeordnet werden.
Nun habe ich ein Formular und eine Abfrage erstellt, die diese Sortierung vornimmt und die Kostenstellen nach einer beliebigen Kategorie filtert (mit dem WHERE-Befehl).
Mir fehlt allerdings die Funktion, dass die Kosten der gefundenen Datensätze irgendwo summiert angegeben werden.
Wie mache ich das?


Die Zuordnung, von der ich gerade gesprochen habe, läuft über Ziffern, die wiederum für die Kategorien stehen.
Ein Datensatz in der o.g. Tabelle hat bspw. also in der Spalte KstArt die Ziffer 2 stehen. Diese Ziffer 2 steht in der Tabelle "RT_Kostenart" wiederum für die Kostenart "Verträge".
In dem Formular, mit welchem man nun die Kostenstellen filtern kann, möchte ich ein Drop-Down-Menü erstellen, in welchem die Bezeichnungen der Kostenarten stehen und nicht die Ziffern. Weitergegeben an die Abfrage allerdings muss die jeweilige Ziffer, da die HT_Betriebsnebenkosten ja nur damit etwas anfangen kann.
Wie mache ich das?


Danke für eure Hilfe!
 
Schau dich mal um nach der Funktion SUM. Diese kann im SELECT benutzt werden.

Gruß
 
Die Tabellen HT_Betriebsnebenkosten mit RT_Kostenart joinen auf HT_Betriebsnebenkosten.KstArt=RT_Kostenart.Id (bzw die Spalte, in der du deinen Schlüssel hast...)

Gruppieren nach Kostenart und als einziges Ergebnis per SUM-Aggregatfunktion und Where-Befehl zur selektion deiner KstArt den Wert ausgeben.

Sag mir wie dein Schlüssel in RT_Kostenart heisst, wie das Feld in der Tabelle heisst, in dem dann "Verträge" steht.
Dann kann ich dir wahrscheinlich was fast fertiges posten...

*edit1:
Code:
SELECT SUM(HT_Betriebsnebenkosten.Kosten) AS Kosten_Gesamt
FROM RT_Kostenart INNER JOIN HT_Betriebsnebenkosten ON RT_Kostenart.ID=HT_Betriebsnebenkosten.KstArt
WHERE RT_Kostenart.Art LIKE "Verträge"
GROUP BY RT_Kostenart.Art;

Erklärt mit einfachem Bsp in der angehängten DB

*edit2:
Nein, du musst nicht zwingend die Ziffer weitergeben. Wenn du das Formular auf einem join von 2 Tabellen aufbaust, dann kannst du auch nach "Verträge" selektieren. Allerdings gibt es auch mehrspaltige DropDown Felder, bei denen die zB erste Spalte nicht sichtbar ist. Da kann man dann als Werte dem Ding praktisch zuweisen, dass es in der ersten Spalte ne 1 hat, in der 2. dann "miete", in dem nächsten Datensatz dann zB 1. Spalte "2", 2. Spalte "Verträge". Das ist aber komplexer. Warum machst es nicht direkt über ne Abfrage?

Mach eine Abfrage, in der du die 2 Tabellen joinst. Dann machst du daraus das Formular. Dann kannst du selektieren nach Verträge und kannst abhängig von der selektion auch andere Abfrageergebnisse bekommen (offensichtlich)
 

Anhänge

Zuletzt bearbeitet:
Die Tabellen HT_Betriebsnebenkosten mit RT_Kostenart joinen auf HT_Betriebsnebenkosten.KstArt=RT_Kostenart.Id (bzw die Spalte, in der du deinen Schlüssel hast...)

Gruppieren nach Kostenart und als einziges Ergebnis per SUM-Aggregatfunktion und Where-Befehl zur selektion deiner KstArt den Wert ausgeben.

Sag mir wie dein Schlüssel in RT_Kostenart heisst, wie das Feld in der Tabelle heisst, in dem dann "Verträge" steht.
Dann kann ich dir wahrscheinlich was fast fertiges posten...

*edit1:

Code:
SELECT SUM(HT_Betriebsnebenkosten.Kosten) AS Kosten_Gesamt
FROM RT_Kostenart INNER JOIN HT_Betriebsnebenkosten ON RT_Kostenart.ID=HT_Betriebsnebenkosten.KstArt
WHERE RT_Kostenart.Art LIKE "Verträge"
GROUP BY RT_Kostenart.Art;

Erklärt mit einfachem Bsp in der angehängten DB
Zu Nummer 1:
Vielen Dank für deine Bemühungen.
Soweit ich das aber verstehe entspricht dieser Ansatz nicht meiner Herausforderung.
Ich möchte eine Auflistung aller Kostenstellen, die zu der Kategorie X gehören und zustzäich (!) - entweder als extra Zeile / Pop-Up o.ä. - die Information, welcher Summe diese Kostenstellen entsprechen.


Zu Nummer 2:
Okay, der JOIN-Ansatz gefällt mir soweit. Nach ein wenig googlen habe ich herausgefunden, dass eben diese Verknüpfung hergestellt wird. Nur wo muss ich jetzt den JOIN verwenden? In der Abfrage? Wie sähe das aus?

SELECT HT_Betriebsnebenkosten
FROM RT_Kostenart INNER JOIN HT_Betriebsnebenkosten
ON RT_Kostenart.KstArtNr=HT_Betriebsnebenkosten.KstArtNr
WHERE RT_Betriebsnebenkosten.Kostenart LIKE Forms!Formular_Kostenart!Kostenart;

Kann ich INNER JOIN und WHERE innerhalb einer Abfrage verwenden?
 
Zuletzt bearbeitet von einem Moderator:
Okay, der JOIN-Ansatz gefällt mir soweit. Nach ein wenig googlen habe ich herausgefunden, dass eben diese Verknüpfung hergestellt wird. Nur wo muss ich jetzt den JOIN verwenden? In der Abfrage? Wie sähe das aus?

Mein Quote:
FROM RT_Kostenart INNER JOIN HT_Betriebsnebenkosten ON RT_Kostenart.ID=HT_Betriebsnebenkosten.KstArt


Kann ich INNER JOIN und WHERE innerhalb einer Abfrage verwenden?
SELECT SUM(HT_Betriebsnebenkosten.Kosten) AS Kosten_Gesamt
FROM RT_Kostenart INNER JOIN HT_Betriebsnebenkosten ON RT_Kostenart.ID=HT_Betriebsnebenkosten.KstArt
WHERE RT_Kostenart.Art LIKE "Verträge"
GROUP BY RT_Kostenart.Art;

Also ja ^^

*edit1:
Where sortiert die Datensätze aus VOR dem Gruppieren, wenn du NACH dem Gruppieren etwas aussortieren willst, zB anhand eine Aggregatfunktion, dann musst du HAVING benutzen.

Also sorry, das mit dem PopUp könnte ich nur sehr noobig über VBA oder so realisieren. Daher lass ich das.
 
Also INNER JOIN funktioniert nun wunderbar. Wie kann ich mehrere INNER JOIN innerhalb einer Anfrage verwenden?


Die ganze Sache habe ich nun anders gelöst. Anstatt Kosten_Gesamt in der Tabellenansicht habe ich habe einen Bericht erstellt, der mir alle Datensätze zu einer Kategorie auflistet und im Dokumentenfuß die Summe ausspuckt - so habe ich nun die totale Übersicht. Der Bericht ist nun auch ganz einfach in Excel zu exportieren.

Allerdings möchte ich nun, dass dem Nutzer ein Drop-Down-Menü vorgesetzt wird, aus welchem er eine Kategorie auswählen kann und schließlich der Bericht dazu generiert wird.
Wie schaffe ich das?
 
Also INNER JOIN funktioniert nun wunderbar. Wie kann ich mehrere INNER JOIN innerhalb einer Anfrage verwenden?
SELECT SUM(HT_Betriebsnebenkosten.Kosten) AS Kosten_Gesamt
FROM RT_Kostenart INNER JOIN HT_Betriebsnebenkosten ON RT_Kostenart.ID=HT_Betriebsnebenkosten.KstArt
WHERE RT_Kostenart.Art LIKE "Verträge"
GROUP BY RT_Kostenart.Art;

Also, erst mal zu der Funktionsweise von INNER JOIN in Access:
Wenn man 2 Tabellen auf einen Schlüssel gejoint hat, werden die wie eine Tabelle erachtet. Das wiederum bedeutet, man kann mit Klammern beliebig viele (oder zumindest sehr sehr viele) joinen.
FROM tabKunden INNER JOIN
(tabAdrn INNER JOIN
tabRufnummern ON tabAdrn.Telefon = tabRufnummern.Telefon)
tabRufnummern ON tabKunden.Kundennummer = tabRufnummern.Kundennummer
usw usw... Mit Dropdown kannst du doch in Access für dieses Dropdown-Element in den Eigenschaften eine Source festlegen... Sources können Abfragen sein, heisst, du kannst zur Auswahl die SELECT DISTINCT Abfrage nehmen, als Beispiel. Und auf den Knopf, der deinen Bericht generiert, eine Variable Abfrage auf Basis des DropDown Values.
 
Zurück
Oben