Seite 2 von 2

Re: Differenz zweier Felder

Verfasst: Do, 05.11.2009 19:46
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...

Re: Differenz zweier Felder

Verfasst: Do, 05.11.2009 20:24
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

Re: Differenz zweier Felder

Verfasst: Do, 05.11.2009 23:13
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?

Re: Differenz zweier Felder

Verfasst: Fr, 06.11.2009 19:01
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