MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 21.09.2017, 16:46   #1
Cengiz_90
Neuer Benutzer
Neuer Benutzer
Standard Anderes DBMS - Summieren von berechneter Spalte in gleicher Abfrage

Hallo liebe Leser,

ich hoffe ich bin hier im richtigen Forum. Es geht um eine SQL-Abfrage in Access. Ich habe folgendes Problem.

Ich möchte den Bedarf berechnen für insgesamt fünf Jahre.


Ich habe folgende Tabellenstruktur

PID; PGID; Bed_VJ; WaR; Anteil; Bed_Akt; Bedarf_NJ ; Bedarf _NJ+1 usw.
1; 1; 20; 1,1; 0,3; 6,6; Sum(Bed_Akt) * WaR * Anteil
1; 2; 20; 1,05; 0,7; 14,7; Sum(Bed_Akt) * WaR * Anteil
----------------------------------------------------------------------------------
Kurze Erläuterung:
-PID = ProduktID ; -PGID = ProduktguppenID;
-Bedarf_VJ = Bedarf ist für das Produkt aus dem Vorjahr gegeben. -WaR = Wachstumsrate der Produktruppe,- Anteil = Anteil des Produktes an der Produktgruppe, -Bedarf_Akt = Berechnung ( Bed_VJ * WaR * Anteil) und Bedarf

Mein SQL-Statement sieht aktuell wie folgt aus

Select PID, PGID, Bed_VJ, WaR, Anteil
(Bed_VJ * WaR * Anteil) as Bed_Akt
SUM (Bed_Akt ) * WaR * Anteil as Bedarf_NJ //Funktioniert aber nicht
SUM (Bed_NJ) * WaR * Anteil as Bedarf_NJ+1
SUM (Bed_NJ+1) * WaR * Anteil as Bedarf_NJ+2
usw.
FROM
Produkt

Über eine Antwort würde ich mich freuen. Vielen Dank schnonmal

Geändert von Cengiz_90 (21.09.2017 um 16:54 Uhr).
Cengiz_90 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 00:00   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Moin Cengiz.

Ich verstehe nicht ganz, wozu die berechneten Felder in der dargestellten "Tabellenstruktur" gut sein sollen.
Prinzipiell gehören berechnete Felder nicht in Tabellen sondern werden - zur Laufzeit, wenn nötig - in Abfragen berechnet.

Dann gehören die Bedarfe für die kommenden Jahre ebenfalls nicht in die Datensätze der Tabelle. Wenn Du beispielsweise irgendwann sechs Jahre im Voraus planen möchtest, müsstest Du in dem Datenmodell eine neue Spalte einfügen. Das ist Humbug.

Es muss für die Bedarfsplanung oder -prognose eine Abfrage entwickelt werden, für die es für jedes Produkt in Kombination mit dem Prognosejahr genau einen Datensatz gibt. Die Zugehörigkeit des Produkts zu einer bestimmten Produktgruppe hat in der fraglichen Abfrage aber nicht unbedingt eine Aussagekraft, kann also als Ausgabefeld durchaus wegbleiben.
Sicher kann man das Ergebnis einer solchen Abfrage auch in eine Tabelle schreiben (Anfüge-Abfrage).

Die Erstellung einer zusätzlichen Hilfstabelle mit den in Frage kommenden Jahren kann zusätzlich wertvoll sein.

Zur anzuwendenden Berechnungsformel:
Der Ansatz mit Summe ist mathemarisch falsch, weil ja der Bedarf sich im jeweiligen Jahr prozentual zum jeweiligen Vorjahr ändert. Das ist eine Exponentialfunktion.
Code:

Bedarf im Jahr x = Bedarf im Jahr 0 * (WaR * Anteil ) hoch (Jahr x - Jahr 0)

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (22.09.2017 um 00:03 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 08:42   #3
Cengiz_90
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Morgen Hans-Christian,

vielen Dank für deine ausführliche Antwort. Ich glaube ich habe vergessen zu erwähnen, dass das Ergebnis eine Abfrage sein soll, um die Daten anschließend in Excel zu importieren. Daraus soll dann ein Bericht gebaut werden.
Tut mir leid, ich habe die Tabellenstruktur etwas falsch beschrieben. In der Tabelle sind nicht die Bedarfe für die nächsten Jahre drin sondern nur der aktuelle, die Wachstumsrate und der Anteil.

Ich möchte eine Abfrage erstellen, die als Ergebnis die Bedarfe der nächsten 5 Jahre ausgibt.

Jedoch fehlt mir aktuell das Wissen darüber wie ich die Bedarfe der Produkte summiere. Diese benötige ich nämlich dann für die Berechnung des jeweiligen nächsten Jahres wie bereits beschrieben.

Ja die Mathematik, die dahinter steckt kann anschließend angepasst werden, wenn ich weiß wie ich erstmal zum Ergebnis komme Zum Ergebnis würde ich kommen, wenn ich für jedes Jahr eine neue Abfrage mache und den Wert summiere. Jedoch suche ich nach einer eleganteren Lösung.Vielen Dank

Geändert von Cengiz_90 (22.09.2017 um 09:26 Uhr).
Cengiz_90 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 13:47   #4
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat:

dass das Ergebnis eine Abfrage sein soll, um die Daten anschließend in Excel zu importieren. Daraus soll dann ein Bericht gebaut werden.

Warum der Umweg über Excel?
Warum nicht gleich den Bericht in Access?

Du hast scheinbar meinen Beitrag nicht genau gelesen.
Der Bedarf errechnet sich nicht aus Summen sondern exponentiell.

Im aktuellen Jahr ist
Code:

Bedarf_Jahr_1 = Bedarf_Jahr_0 * Anteil * Wachstumsrate
Im Jahr darauf ist
Code:

Bedarf_Jahr_2 = Bedarf_Jahr_1 * Anteil * Wachstumsrate
usw.
Oder allgemein
Code:

Bedarf_Jahr_n = Bedarf_Jahr_n_minus_1 * Anteil * Wachstumsrate
Für jedes weitere Jahr wird der neue Bedarf also gebildet aus dem Produkt des letzten Jahres mit dem Faktor (Anteil * Wachstumsrate)

Wenn ich das jetzt für das Jahr 5 nehme, bekomme ich
Code:

Bedarf_Jahr_5 = Bedarf_Jahr_4 * Anteil * Wachstumsrate
Bedarf_Jahr_5 = Bedarf_Jahr_3 * Anteil * Wachstumsrate * Anteil * Wachstumsrate
und letztlich
Bedarf_Jahr_5 = Bedarf_Jahr_0 * (Anteil * Wachstumsrate) hoch 5
Dies drückt meine Formel in #2 aus.

Jetzt baust Du Dir eine Hilfstabelle mit lediglich einem Feld.
In der speicherst Du die fünf Jahre, um die es geht.
Und mit einem CROSS JOIN verbindest Du diese Tabelle mit Deiner und errechnest für das Kreuzprodukt aus Deinen Artikeln und den fünf Jahren den jeweiligen Bedarf
Code:

select t.pid, j.b_jahr, 
 t.bed_vj * (t.war * t.anteil) ^ (j.b_jahr - year(date())) as neu_bedarf
from deine_tabelle as t, tbl_jahre as j

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 14:34   #5
Cengiz_90
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Weinen

Hallo Hans-Christian,

vielen Dank nochmal, dass du dir die Zeit für mein Problem nimmst. Ich habe dich schon verstanden, ich glaube nur, dass ich das Problem nicht ausreichend korrekt beschrieben habe. Ich versuche nochmal das Problem zu schildern, warum ich eine Summe benötige.

Ich habe eine Abfrage die mir folgendes Ergebnis liefert

Code:

PID; PGID;  Wachstumsrate; Anteil;  Bedarf_N; Bedarf_N+1;    
1   ; 1           ; 5 %                ; 0,5    120           63                
1   ; 2           ; 7 %                ; 0,3    120           38,52
1   ; 3           ; 20%                ; 0,2   120          28,8
2   ; 4           ; -3 %               ; 1       130
Kurz zur Erläuterung:
- Die Wachstumsrate ergibt sich auf Basis der Produktgruppe
- Der Anteil ergibt sich aus Materialien die für die Produktgruppe benötigt werden / Gesamtmenge an Materialien
-Der Bedarf_N ist der gesamte Bedarf für das Produkt (dieses war von mir falsch beschrieben)

Für Bedarf_N+2 würde ja auch wie von dir beschrieben die Formel lauten
Bedarf_N+1 * WaR * Anteil. Jedoch benötige ich doch den Gesamtbedarf für z. B. Produkt 1 aus Bedarf_N+1.

Vielen Dank
Cengiz_90 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 14:38   #6
Cengiz_90
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Weinen

Hallo Hans-Christian,

vielen Dank nochmal, dass du dir die Zeit für mein Problem nimmst. Ich habe dich schon verstanden, ich glaube nur, dass ich das Problem nicht ausreichend korrekt beschrieben habe. Ich versuche nochmal das Problem zu schildern, warum ich eine Summe benötige.

Ich habe eine Abfrage die mir folgendes Ergebnis liefert

Code:

PID; PGID;  WaR  ; Anteil;  Bedarf_N;   Bedarf_N+1;    
1   ; 1      ;   5 % ; 0,5       120              63                
1   ; 2      ;   7 % ; 0,3       120              38,52
1   ; 3      ;  20% ; 0,2       120              28,8
2   ; 4      ; -3 %  ; 1         130              126,1
Kurz zur Erläuterung:
- Die Wachstumsrate ergibt sich auf Basis der Produktgruppe
- Der Anteil ergibt sich aus Materialien die für die Produktgruppe benötigt werden / Gesamtmenge an Materialien
-Der Bedarf_N ist der gesamte Bedarf für das Produkt (dieses war von mir falsch beschrieben)

Für Bedarf_N+2 würde ja auch wie von dir beschrieben die Formel lauten
Bedarf_N+1 * WaR * Anteil. Jedoch benötige ich doch den Gesamtbedarf für z. B. Produkt 1 aus Bedarf_N+1.

Vielen Dank
Cengiz_90 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.09.2017, 18:10   #7
hcscherzer
MOF Guru
MOF Guru
Standard

Ich bin zusehends verwirrt.
Ist denn tatsächlich das Produkt 1 in den Gruppen 1, 2 und 3 ???
Und Produkt 2 ist (nur) in Gruppe 4?

Oder ist es umgekehrt und Produkt 1 ist zusammengesetzt aus den Gruppen 1, 2 und 3?
Dann ist mindestens die Bezeichnung "Gruppe" missverständlich.
Wenigstens ergibt damit aber der Wert für Anteil einen Sinn: die Summe pro Produkt ist 1 (100%).

Dass die anteilgen Bedarfe der Gruppen pro Produkt einfach so zusammengezählt werden dürfen, geht mir inhaltlich nicht in den Kopf.
Wenn ich die jeweilgen Anteile in Betracht ziehe, dann haben die drei Gruppen einzelne Bedarfe von 60, 36 und 24. Warum wird die Wachstumsrate nicht direkt darauf angewandt? Im Ergebnis kamst Du auf die gleichen Werte. Und dies auch für die Folgejahre, wenn Du aus den errechneten Einzelbedarfen wieder die Summe bildest, den Anteil neu berechnest und dann wieder die Wachstumsrate multiplizierst. Das hebt sich gegenseitig auf.

Freilich war in meinen Formeln in #4 auch noch ein kleiner Denkfehler: ich hatte nur die Zuwächse ausgerechnet. So müsste es korrekt sein:
Code:

select t.pid, t.pgid, j.b_jahr, 
 t.anteil * t.bed_vj * (1 + t.war) ^ (j.b_jahr - year(date())) as neu_bedarf
from deine_tabelle as t, tbl_jahre as j

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (22.09.2017 um 18:12 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.09.2017, 09:33   #8
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Ich habe eine Abfrage die mir folgendes Ergebnis liefert

Auf eine Abfrage unbekannter Formulierung weitere (aufwändige) Folgeabfragen aufzubauen kann problematisch sein: Ist die Vorleistung in sich und für die nachfolgende Auswertung durchdacht oder evtl. gerade so irgendwie zusammengeklickt?

Es dürfte sinnvoller sein, von Tabellen aus auf das Wunschergebnis hinzuarbeiten und dabei ggf. eigene statt vorgegebene Zwischenschritte zu unternehmen.
Günstig wäre also das Veröffentlichen der beteiligten Tabellen nebst Datenmodell und einiger repräsentiver Beispieldaten (verwendunbgsfähig als Demo-DB), eine Darstellung der gewünschten Zielsituation, wie sie sich aus den gegebenen Daten 1:1 ergeben soll sowie evtl. eine Beschreibung von notwendigen Berechnungen.

Dann könnte man nachfolgendes sofort zu den Akten legen:

Zitat:

ich glaube nur, dass ich das Problem nicht ausreichend korrekt beschrieben habe

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.