Hi,
vielen Dank für die Bestätigung. Ich hab mich schon gefragt, ob ich da einen dummen Syntaxfehler drin habe. Laut dem
HyperSQL User Guide sollte es da keine Einschränkungen geben, weder bei den Aggregatfunktionen noch bei der
CASE-Formulierung.
Auf
https://bugs.documentfoundation.org/ habe ich nicht einen verwandten Bugreport zu CASE / CASEWHEN gefunden. Sollte ich das melden? Dazu müsste man allerdings erst den Code generalisieren und schauen, ab wann es fehlschlägt - dafür habe ich allerdings gerade keine Kapazitäten frei.
Anderes Thema:
Hat vielleicht doch noch jemand eine Idee, wie die Abfrage "
LaufendeSummierung" editierbar zu bekommen ist?
Ich habe jetzt mal meine hier
geschilderte Idee umgesetzt:
Der Inhalt der Spalte "Sackliste_für_Bestellung"."id" kopiere ich in die neuangelege Tabelle "Bestellung_Sackliste", die neben einem Primarschlüssel nur eine Spalte "Auswahl", Typ Checkbox enthält.
Das Formular "Sackliste_für_Bestellung" in dem Formular Bestellungen hat als Datengrundlage dann die Abfrage "Sackliste_für_Bestellung_kontrollieren":
Code: Alles auswählen
SELECT
"Bestellung_Sackliste"."id" AS "ID",
"Bestellung_Sackliste"."Auswahl",
"Kräuter".*
FROM
"Bestellung_Sackliste",
"Kräuter"
WHERE
"Bestellung_Sackliste"."Sack-id" = "Kräuter"."id"
Nun können Säcke abgewählt werden.
Jetzt habe ich leider die laufende Summierung nicht mehr in dieser Anzeige, deshalb habe ich die Abfrage "Bestellung_zu_bearbeiten" erweitert um eine Summierung der ausgewählten Säcke nach Krautart.
Nun hätte ich natürlich gerne, dass wenn ein Sack abgewählt wurde, der nächste Sack dazu genommen wird:
Code: Alles auswählen
WHERE
CASE
WHEN "Bestellung_Sackliste"."Sack-id" = "a"."id"
THEN "Bestellung_Sackliste"."Auswahl" <> FALSE
ELSE
TRUE
END
in LaufendeSummierung
Das gibt eine Fehlermeldung HAVING statt WHERE liefert keine Fehlermeldung mehr, aber funktionieren tut es auch nicht.
Im HSQL UserGuide fand ich auch
folgenden Hinweis:
The result of a case expression is always a value
Dies erklärt, warum ich CASE nicht innerhalb von WHERE / HAVING einsetzen kann.
Nun habe ich versucht, dass mit einem LEFT JOIN zu lösen, was grundsätzlich auch funktioniert:
Code: Alles auswählen
SELECT
COUNT(*) as "lfdNr",
"A"."id",
"A"."Lagerort",
"A"."Kraut",
"A"."Sacknummer",
"A"."Chargennummer",
"A"."Gewicht",
SUM( "B"."Gewicht" ) AS "Laufende Summe"
FROM
"Kräuter" AS "A"
INNER JOIN
"Kräuter" AS "B"
ON
"B"."id" <= "A"."id"
AND
"B"."Kraut" = "A"."Kraut"
AND
"A"."verkauft" <> TRUE
AND
"B"."verkauft" <> TRUE
LEFT JOIN "Bestellung_Sackliste"
ON "A"."id" = "Bestellung_Sackliste"."Sack-id"
WHERE
"Bestellung_Sackliste"."Auswahl" = TRUE
OR
"Bestellung_Sackliste"."Auswahl" IS NULL
GROUP BY
"A"."id",
"A"."Lagerort",
"A"."Kraut",
"A"."Sacknummer",
"A"."Chargennummer",
"A"."Gewicht"
Abfrage: LaufendeSummierung_
Aber jetzt stimmt die Laufende Summe natürlich noch nicht. Wenn ich aber das LEFT JOIN vor das INNER JOIN stelle, bekomme ich die Fehlermeldung
Column not found: B.Gewicht
Ich bin gerade etwas ratlos - wer weiß Rat und kann helfen?
Vielen Dank und Grüße,
EinsamerBaumWald