Differenz zweier Felder

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

zummy
*
Beiträge: 18
Registriert: So, 18.02.2007 19:58

Re: Differenz zweier Felder

Beitrag von zummy »

Nein, ich habe wirklich alles überprüft. Keine versteckten Leerzeichen.

Hier einmal der Code der verwendeten Abfrage "a_1_Ergebnis_unter":

Code: Alles auswählen

SELECT
"a_4_aktuellster_kontostand"."KONTO",
"a_4_aktuellster_kontostand"."KONTOSTAND",
"a_2_Summe"."SUMME"
FROM { OJ "a_2_Summe" AS "a_2_Summe" RIGHT OUTER JOIN "a_4_aktuellster_kontostand" AS "a_4_aktuellster_kontostand" ON "a_2_Summe"."KASSE" = "a_4_aktuellster_kontostand"."KONTO" }
Diese Abfrage funktioniert wunderbar.

Eine alternative Lösung meines Problems wäre, wenn ich es hinbekommen würde, in der Spalte "a_1_Ergebnis_unter"."SUMME" immer dann, wenn jetzt der Wert NULL dort steht, eine 0 einzutragen. Aber auch das gelingt mir nicht...
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Differenz zweier Felder

Beitrag von Barlee »

verwendeten Abfrage "a_1_Ergebnis_unter":
Aha! Du hast eine Abfrage, die Du unter dem Namen der Abfrage erneut abfragst, korrekt?
Das kann nicht funktionieren!

1) Entweder verschachtelst Du die Abfrage, wie ich es weiter oben beispielhaft geschildert habe (also in einem SQL Block) oder
2) Du erstellst aus der Abfrage "a_1_Ergebnis_unter" eine Ansicht (View). Darauf kannst Du dann wie auf eine Tabelle zugreifen. >> rechte Maustaste auf die Abfrage >> als Ansicht erstellen >> Namen vergeben. Diesen Namen kannst Du dann in Deiner Abfrage als Tabellennamen einsetzen.

Gruß Barlee
zummy
*
Beiträge: 18
Registriert: So, 18.02.2007 19:58

Re: Differenz zweier Felder

Beitrag von zummy »

Es klappt! Danke!! :D

Ein einziges Problem gibt es noch in dieser Abfrage:

Code: Alles auswählen

SELECT DISTINCT
"Kassenbuch"."DATUM",
"Kassenbuch"."ZWECK",
"Kassenbuch"."KASSE",
CASE WHEN "Kassenbuch"."EINNAHME" IS NOT NULL THEN "Kassenbuch"."EINNAHME" ELSE 0 END - CASE WHEN "Kassenbuch"."AUSGABE" IS NOT NULL THEN "Kassenbuch"."AUSGABE" ELSE 0 END AS "Betrag"
FROM "Kassenbuch" INNER JOIN "Kontostand" ON "Kassenbuch"."KASSE" = "Kontostand"."KONTO"
WHERE "Kassenbuch"."DATUM" > (SELECT MAX("Kontostand"."DATUM") FROM "Kontostand")
So, wie die Abfrage jetzt geschrieben ist, werden nur Datensätze ausgewählt, bei denen "DATUM" größer ist als das globale "DATUM" in der Tabelle "Kontostand".

Ich möchte aber, dass nicht das globale Maximum genommen wird, sondern das jeweilige Maximum von "DATUM" zu einem bestimmten Wert von "Kontostand"."KONTO". Habe ich das einigermaßen verständlich ausgedrückt?
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Differenz zweier Felder

Beitrag von Barlee »

Hallo zummy,

ist jetzt nicht getestet. Probiere mal in der Art:

Code: Alles auswählen

SELECT Tab_A.* FROM
(
SELECT DISTINCT
"Kassenbuch"."DATUM",
"Kassenbuch"."ZWECK",
"Kassenbuch"."KASSE",
CASE WHEN "Kassenbuch"."EINNAHME" IS NOT NULL THEN "Kassenbuch"."EINNAHME" ELSE 0 END - CASE WHEN "Kassenbuch"."AUSGABE" IS NOT NULL THEN "Kassenbuch"."AUSGABE" ELSE 0 END AS "Betrag"
FROM "Kassenbuch" INNER JOIN "Kontostand" ON "Kassenbuch"."KASSE" = "Kontostand"."KONTO"
WHERE "Kassenbuch"."DATUM" > (SELECT MAX("Kontostand"."DATUM") FROM "Kontostand")
) "Tab_A",
(
(SELECT 
"Kontostand"."KONTO", 
MAX("Kontostand"."DATUM") AS "DATUM"
FROM "Kontostand"
GROUP BY "Kontostand"."KONTO"
) "Tab_B",
WHERE "Tab_A"."KASSE" = "Tab_B"."KONTO"
AND "Tab_A"."DATUM" > "Tab_B"."DATUM"
Gruß Barlee
Antworten