Hallo,
wohl mein vorerst letztes Access-Problem...
Ich bin gerade dabei, eine Art Übersicht über die geplanten Einkommen und Ausgaben zu erstellen.
Die Einkommensseite ist dabei schon fertig bearbeitet.
Die Ausgaben sind eigentlich auch nahezu fertig.
Wie im Screenshot zu sehen habe ich mir eine Abfrage (Screenshot 12) erstellt, die mir alle Ausgaben im gewünschten Zeitraum anzeigt.
Daraufhin habe ich mir einen Bericht erstellt (Screenshot 13), der die Ausgaben erst gemäß Filliale oder Headquarter und danach nochmal nach Ausgabenart sortiert.
Dies ist insoweit auch wie gewollt.
Nun habe ich noch die Thematik mit Kreditrückzahlungen.
Für diese habe ich schon mal eine Abfrage erstellt, der mir die anstehenden Kreditzahlungen + Zinszahlungen samt Währung anzeigt. (Screenshot14)
Nun würde ich gerne aus dieser Abfrage mir die Summe der anstehenden Kreditzahlungen sowie Zinszahlungen und Währungen ziehen. Und das am besten so, dass diese dann in dem gezeigten Bericht unter Headquarter und unter "Kreditrückzahlung" bzw. "Zinsen" mit der Währung stehen.
Ist so etwas machbar? Ich müsste ja dann sowohl die Abfrage für die Ausgaben als auch die Abfrage über die Kreditrückzahlung zusammenführen (Union)...aber meine Experimente damit waren bisher eher schlecht als recht.
Vielen Dank und viele Grüße,
Marcus
Hallo,
die Abfragen müssten für die Zusammenfassung mit einer Union-Abfrage übereinstimmende Datenfelder in Reihenfolge, Typ und Verwendungszweck liefern. So wie es jetzt aussieht, trifft das nicht zu. Ob das machbar ist, kannst wohl nur du entscheiden.
Ja, dann wohl eher nicht wie es scheint.
Gäbe es neben UNION noch eine andere Möglichkeit, das Gewünschte zu erreichen?
Sorry, aber du bist doch derjenige der das Tabellenkonzept und die Daten kennt und solltest daher am besten wissen, wie die zusätzlichen Daten zu den sonstigen Daten passen und in den Bericht integriert werden können.
Wir können dir nur dann bei der Umsetzung helfen, wenn sämtliche Randbedingungen klar sind.
Nunja, ich hatte die Vorstellung, dass ich mir quasi meine bisherige Abfrage (siehe Screenshot12) beibehalte und dann darunter noch zwei Datensätze hinzufügen lasse.
Das wäre dann die Summe der Rückzahlungen und die Summe der Zinszahlungen. Beide würden dann eine eigene Expensekategorie darstellen.
Bei den Feldern BranchOrHeadquarter sowie Branch müsste dann dazugeschrieben werden "Headquarter", das kann er nicht automatisch übernehmen und beim ExpenseDatum müsste man sich auch etwas einfallen lassen...auch wenn das nicht so dramatisch ist, da es eh nicht angezeigt werden muss.
Ist halt die Frage, ob man sich einzelne Summen aus anderen Abfragen ziehen kann und diese dann handschriftlich im SQL-Code um ein paar Felder ergänzt, damit sie in das bestehende Abfragedesign passen.
Machbar ist so manches und natürlich kannst du auch Konstanten für fehlende Datenfelder in der Abfrage hinzufügen. Für einen konkreten Vorschlag bräuchte man aber mehr Detailkenntnisse, bspw. welche Datenfelder aus Abfrage X entsprechen welchen Datenfeldern aus Y? Und was fehlt, was wäre wie zu ergänzen?
Ok, also in meiner Abfrage für die Aufwendungen/Expenses sind folgende Felder und wie sie den Feldern der Abfrage für die Kreditrückzahlungen entsprechen:
- ExpenseDate = RepaymentDate (Datum)
- BranchOrHeadquarter muss ergänzt werden manuell durch "Headquarter" (kurzer Text)
- Branch muss ergänzt werden durch "Headquarter" (kurzer Text)
- ExpenseCategory müsste ergänzt werden: "Loan Repayment" (kurzer Text)
- Bei Amount müsste man die SUMME der Repayments aus der Abfrage für die Rückzahlungen entnehmen. (Zahl, Single, sowohl bei "Interest", "Repayment" als auch "Amount")
- ExpenseCurrency = LoanCRY (bei beiden kurzer Text)
Dann müsste ich eine weitere Zeile anlegen wo alles gleich bleibt, nur dass als ExpenseCategory "Zinsen" hinzugefügt werden und ich unter Amount dann die Summe der Zinsen aus der Abfrage entnehme.
Hilft das weiter oder sind noch weitere Infos nötig?
Welche Abfrage ist denn die derzeitige Datenquelle des Berichts, ist das die "CF_ExpensesForecastQ"?
Und was genau meinst du mit:
ZitatBei Amount müsste man die SUMME der Repayments aus der Abfrage für die Rückzahlungen entnehmen. (Zahl, Single, sowohl bei "Interest", "Repayment" als auch "Amount")
Und dann zeig doch bitte den SQL-Code beider Abfragen, ich habe keine Lust das alles abzutippen.
Hallo,
Welche Abfrage ist denn die derzeitige Datenquelle des Berichts, ist das die "CF_ExpensesForecastQ"?Ja, so ist es.
ZitatUnd was genau meinst du mit:
"Bei Amount müsste man die SUMME der Repayments aus der Abfrage für die Rückzahlungen entnehmen. (Zahl, Single, sowohl bei "Interest", "Repayment" als auch "Amount")"
In der zweiten Abfrage, CF_ExpensesLoanRepaymentQ, habe ich zwei Felder, einmal die Kreditrückzahlung und dann noch die Zinsen.
Aus dieser Abfrage benötige ich jetzt die Summen der Rückzahlungen und der Zinsen. Diese sind dann quasi "Amount".
Die entsprechenden Felder der da zugrunde liegende Tabellen (einmal tblExpenses und das andere mal tblLoanRepayment), also LoanRepayment, Interest und eben Amount sind Zahlen, vom Typ Single.
ZitatUnd dann zeig doch bitte den SQL-Code beider Abfragen, ich habe keine Lust das alles abzutippen.
Anbei der SQL-Code von CF_ExpensesForecastQ
SELECT CF_ExpensesT.BranchOrHeadquarter, CF_ExpensesT.Branch, CF_ExpensesT.ExpenseCategory, CF_ExpensesT.Amount, CF_ExpensesT.ExpenseCurrency
FROM CF_ExpensesT
WHERE (((CF_ExpensesT.ExpensesDate)>=[TempVar]![StartDateCF] And (CF_ExpensesT.ExpensesDate)<=[TempVar]![EndDateCF]) AND ((CF_ExpensesT.Branch) Like [TempVar]![BranchCF] & ('*')));
Und der SQL-Code von CF_ExpensesLoanRepaymentQ
SELECT BK_LoanDetailsT.LenderName, BK_LoanRepaymentT.RepaymentDate, BK_LoanRepaymentT.Repayment, BK_LoanRepaymentT.Interest, BK_LoanRepaymentT.LoanCRY, BK_LoanRepaymentT.Notes
FROM BK_LoanDetailsT INNER JOIN BK_LoanRepaymentT ON BK_LoanDetailsT.LoanID = BK_LoanRepaymentT.LoanID
WHERE (((BK_LoanRepaymentT.RepaymentDate)>=[TempVar]![StartDateCF] And (BK_LoanRepaymentT.RepaymentDate)<=[TempVar]![EndDateCF]));
Vielen Dank für deine Mühen.
Wenn ich dich richtig verstanden habe, möchtest du die Abfrage "CF_ExpensesForecastQ" mit Datensätzen aus der Abfrage "CF_ExpensesLoanRepaymentQ" nach o.g. Regeln ergänzen.
Der Code dazu sähe dann so aus:
SELECT E.BranchOrHeadquarter, E.Branch, E.ExpenseCategory, E.Amount, E.ExpenseCurrency
FROM CF_ExpensesT AS E
WHERE (
((E.ExpensesDate)>=[TempVar]![StartDateCF] And
(E.ExpensesDate)<=[TempVar]![EndDateCF]) AND
((E.Branch) Like [TempVar]![BranchCF] & ('*'))
);
UNION ALL
SELECT "Headquarter", "HeadQuarter", "Loan Repayment", LR.Repayment + LR.Interest, LR.LoanCRY
FROM BK_LoanDetailsT AS LD INNER JOIN BK_LoanRepaymentT AS LR
ON LD.LoanID = LR.LoanID
WHERE (
((LR.RepaymentDate)>=[TempVar]![StartDateCF] And
(LR.RepaymentDate)<=[TempVar]![EndDateCF])
);
Hallo,
ja, es war fast so, wie ich es wollte.
Ich habe es jetzt dazu angepasst:
SELECT E.BranchOrHeadquarter, E.Branch, E.ExpenseCategory, E.Amount, E.ExpenseCurrency
FROM CF_ExpensesT AS E
WHERE (
((E.ExpensesDate)>=[TempVar]![StartDateCF] And
(E.ExpensesDate)<=[TempVar]![EndDateCF]) AND
((E.Branch) Like [TempVar]![BranchCF] & ('*'))
);
UNION ALL
SELECT "Headquarter", "HeadQuarter", "Loan Repayment", LR.Repayment, LR.LoanCRY
FROM BK_LoanDetailsT AS LD INNER JOIN BK_LoanRepaymentT AS LR
ON LD.LoanID = LR.LoanID
WHERE (
((LR.RepaymentDate)>=[TempVar]![StartDateCF] And
(LR.RepaymentDate)<=[TempVar]![EndDateCF])
);
UNION
SELECT "Headquarter", "HeadQuarter", "Interest", LR.Interest, LR.LoanCRY
FROM BK_LoanDetailsT AS LD INNER JOIN BK_LoanRepaymentT AS LR
ON LD.LoanID = LR.LoanID
WHERE (
((LR.RepaymentDate)>=[TempVar]![StartDateCF] And
(LR.RepaymentDate)<=[TempVar]![EndDateCF])
);
Gibt es jetzt noch eine Möglichkeit, dass er sowohl bei "Interest" als auch "Loan Repayment" die Summe der Datensätze nimmt und nicht jeden einzelnen Datensatz. Das wäre noch das letzte kleine Extra...
Ich habe es schon ein bisschen versucht, aber dann gibt es bei mir Syntaxfehler... :(
Du kannst es mit Gruppierung in der Abfrage ausprobieren, aber vermutlich musst du das in separaten Abfragen machen und diese in die Union einbinden.
Beispiel:
SELECT "Headquarter", "HeadQuarter", "Interest", Sum(LR.Interest) As SumInt, LR.LoanCRY
FROM BK_LoanDetailsT AS LD INNER JOIN BK_LoanRepaymentT AS LR
ON LD.LoanID = LR.LoanID
WHERE (
((LR.RepaymentDate)>=[TempVar]![StartDateCF] And
(LR.RepaymentDate)<=[TempVar]![EndDateCF])
)
Group By LR.LoanCRY;BTW:
ZitatIch habe es schon ein bisschen versucht, aber dann gibt es bei mir Syntaxfehler...
Es ist grundsätzlich nicht verkehrt, den Versuch zu zeigen und den genauen Wortlaut der Fehlermeldung, dann haben andere auch etwas davon.
Das funktioniert ganz super! :) Perfekt, danke!
Ich muss diesen Thread nochmal rauskramen, leider.
Ich habe nun zwei weitere Aufwandsarten, die hinzugekommen sind und die ich in meiner Übersicht über die prognostizierten Ausgaben noch mit hinzufügen möchte.
Meine bisherige Union-Abfrage, die alle bisher anfallenden Aufwendungen wunderbar zeigt, hat folgenden SQL-Code:
SELECT E.BranchOrHeadquarter, E.Branch, E.ExpenseCategory, E.Amount, E.ExpenseCurrency
FROM CF_ExpensesT AS E
WHERE (
((E.ExpensesDate)>=[TempVar]![StartDateCF] And
(E.ExpensesDate)<=[TempVar]![EndDateCF]) AND
((E.Branch) Like [TempVar]![BranchCF] & ('*'))
);
UNION
SELECT "Headquarter", "HeadQuarter", "Loan Repayment", Round(Sum(LR.Repayment)) As SumInt, LR.LoanCRY
FROM BK_LoanDetailsT AS LD INNER JOIN BK_LoanRepaymentT AS LR
ON LD.LoanID = LR.LoanID
WHERE (((LR.RepaymentDate)>=[TempVar]![StartDateCF] And (LR.RepaymentDate)<=[TempVar]![EndDateCF]))
Group By LR.LoanCRY;
UNION SELECT "Headquarter", "HeadQuarter", "Interest", Sum(LR.Interest) As SumInt, LR.LoanCRY
FROM BK_LoanDetailsT AS LD INNER JOIN BK_LoanRepaymentT AS LR
ON LD.LoanID = LR.LoanID
WHERE (
((LR.RepaymentDate)>=[TempVar]![StartDateCF] And
(LR.RepaymentDate)<=[TempVar]![EndDateCF])
)
Group By LR.LoanCRY;
Nun habe ich für die beiden neuen Aufwandsarten jeweils eine Abfrage erstellt. Diese hat beispielhaft folgenden SQL-Code:
SELECT SA_Sales.SalesDate, SA_Sales.Branch, SA_Sales.Commission
FROM SA_Sales
WHERE (((SA_Sales.SalesDate)>=DateAdd('d',[TempVar]![DifferenzCF],[TempVar]![StartDateCF]) And (SA_Sales.SalesDate)<=[TempVar]![StartDateCF]) AND ((SA_Sales.Commission)>0));
Nun möchte ich die Summe aus dieser Abfrage (von dem Feld Commission) als Summe in die Union-Abfrage übernehmen.
Ich dachte nun folgendes: Aufgrund der fehlenden Übereinstimmung im Aufbau der beiden Abfragen, muss ich handschriftlich die entsprechenden Felder hinzufügen.
Heißt ich füge folgenden Code ein:
UNION Select "Branch", Branch, "Commission", Sum(Commission), "TZS"
FROM CF_CommissionExpensesForecastQ;
Dies funktioniert nun leider nicht, weil der Ausdruck "Branch" nicht als Bestandteil der Aggregatfunktion enthalten ist.
Ich wollte euch fragen, wie ich das nun hinbekomme.
Ich wäre euch sehr dankbar, falls ihr mir helfen könntet.
Vielen Dank und viele Grüße,
Marcus
Hallo Marcus,
da ich dich auf die Union gebracht habe, klinke ich mich nochmal ein.
Habe den thread hier nur überflogen, aber es scheint darauf rauszulaufen, was Klaus dir in dem anderen Beitrag nahe gelegt hat - das Datenmodell. Das ganze tönt schwer nach nicht stimmigem Datenmodell und da muss angesetzt werden, alles andere führt nur zu Ärger.
Hallo,
bei Einsatz von Aggregatfunktionen in Verbindung mit Datenfeldern ist eine Gruppierung erforderlich.
So sollte es klappen:
UNION Select "Branch", Branch, "Commission", Sum(Commission), "TZS"
FROM CF_CommissionExpensesForecastQ
GROUP BY Branch;Nichts anderes war mit dem Hinweis gemeint:
ZitatDies funktioniert nun leider nicht, weil der Ausdruck "Branch" nicht als Bestandteil der Aggregatfunktion enthalten ist.
Hallo,
ganz lieben Dank für den Hinweis. Funktioniert! :)