Berechnung in Abfrage

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Re: Berechnung in Abfrage

Beitrag von berndkli »

Hallo Eagle

Wenn du die baseinterne HSql DB verwendest, kannst du in einer Abfrage entweder in der Zeile "Feld" (da wo sonst die Spaltennamen stehen) rechnen, z.B.

Code: Alles auswählen

"Spalte1" + "Spalte2"
oder, bei grösseren Formeln, direkt in der SQL Ansicht = Designansicht ausschalten.

Angenommen deine Bruttospalte heisst "Brutto" dann gebe in der SQL Ansicht folgenden Code ein

Code: Alles auswählen

SELECT "Brutto", "Brutto" / 1.19 AS "Netto", "Brutto" - "Brutto" / 1.19 AS "Vst"  FROM "Tabellenname" 
Gruss Bernd
ChristianAssmann
*
Beiträge: 15
Registriert: Mo, 28.04.2008 13:47

Re: Berechnung in Abfrage

Beitrag von ChristianAssmann »

Exakt diese Frage stellte sich mir auch nachdem ich die Umstellung auf Base vorgenommen habe.

Nach langen suchen (und auffinden dieses Forum) habe ich dann ebenfalls die Abfragesystematik verstanden und nutze sie nun für meine Problemlösungen.
Ich würde daher an dieser Stelle ebenfalls gerne einharken und hätte bezüglich der Berechnung noch eine Ergänzungsfrage.

Wie man in dem obigen Beispiel gut erkennen kann, wird ein "Unterwert" dadurch gebildet, dass die Eingabe wiederholt wird. Ich habe das bei einigen Abfragen (der Übersichtlichkeithalber) so gelöst, dass ich Unterabfragen hierzu konstruiert habe. Diese Unterabfragen ermöglichen es somit eine Berechnung einmal in Abfrage 1 vorzunehmen und mit der so gebildeten Spalte in der Unterabfrage weiterzurechnen ohne das Ganze immer wieder vollständig neu zu schreiben.

Meine Frage an dieser Stelle:
1.
Wirkt sich diese Vorgehensweise nachteilig auf die Performance von Base aus? Dadurch dass ja erst die Abfrage 1 durchlaufen werden muss um dann in Abfrage 2 weiterverwertet werden zu können.

Diese Frage wollte ich schon länger loswerden, passte grad so gut hier her.

Ich habe mir die frage grade nochmal durchgelesen und verdutliche es lieber über einen Codesnipsle:

Code: Alles auswählen

SELECT "Brutto", "Brutto" / 1.19 AS "Netto", "Brutto" - "Brutto" / 1.19 AS "Vst"  FROM "Tabellenname" 
Abfrage1:

Code: Alles auswählen

SELECT "Brutto", "Brutto" / 1.19 AS "Netto" FROM "Tabellenname" 
Abfrage2:

Code: Alles auswählen

SELECT "Brutto", "Brutto" - "Netto" AS "Vst"  FROM "Abfrage1" 
2.
Wie gehe ich am besten bei "leeren" Inhalten in der Datenbank vor. Wenn ich diese addieren will ist das Ergebnis immer "leer"

So habe ich eine Datenbank wo Rechnungen vorgenommen werden und teilweise Felder leer sind. Leer sollte "0" sein. Allerdings ist Base sehr konsequent. In den so Abgefragten Feldern ist das Ergebnis dann auch "Leer". Mit NULL kam ich dort auch nicht weiter so habe ich nachträglich eine ganze Datenbank mit "0" befüllt. Leider habe ich nun eine andere Datenbank bei der ich dies leider nicht so machen kann. Gibt es hierzu ggf. hierzu einen Tipp / Lösungsvorschlag?
Aktuell im Einsatz:
OpenOffice.org 3.1.0 unter Microsoft XP Professional (im GAD Umfeld)
Base mit Reportbuilder

Derzeitiges Vorhaben:
Umstellung von Lotus Smart Suite (Approach, 123, etc:) auf OOo
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Re: Berechnung in Abfrage

Beitrag von berndkli »

Hallo Christian
Christian hat geschrieben:Wirkt sich diese Vorgehensweise nachteilig auf die Performance von Base aus? Dadurch dass ja erst die Abfrage 1 durchlaufen werden muss um dann in Abfrage 2 weiterverwertet werden zu können.
Dazu kann ich dir nichts sagen, weil ich solche Konstruktionen mit grossen Datenmengen noch nicht verwendet habe.

Zu 2.
Da hilft die Funktion IFNULL.
Hast du beispielsweise eine Tabelle mit drei Spalten die unregelmässig gefüllt sind aber trotzdem addiert werden sollen, dann sieht das so aus:

Code: Alles auswählen

SELECT "Zahl1", "Zahl2", "Zahl3", IFNULL("Zahl1",0) +IFNULL("Zahl2",0) + IFNULL("Zahl3",0)   AS "Summe"  FROM "Tabellenname"
Erläuterungen zu den eingebauten Funktionen findest du hier unter Punkt 9 "Built-in Functions and Stored Procedures"

Gruss Bernd
ChristianAssmann
*
Beiträge: 15
Registriert: Mo, 28.04.2008 13:47

Re: Berechnung in Abfrage

Beitrag von ChristianAssmann »

Vielen Dank für die Hilfe.

IFNULL lässt sich super in die Formeln einbauen und somit muss ich auch nicht mehr die Datenbank mit "0" füllen.
Bezüglich der Performance werde ich das Ganze mal im Auge behalten.
Aktuell im Einsatz:
OpenOffice.org 3.1.0 unter Microsoft XP Professional (im GAD Umfeld)
Base mit Reportbuilder

Derzeitiges Vorhaben:
Umstellung von Lotus Smart Suite (Approach, 123, etc:) auf OOo
Antworten