Abfrage über mehrere Tabellen für einen Bericht erstellen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Abfrage über mehrere Tabellen für einen Bericht erstellen

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von juetho » Mi, 06.02.2013 08:57

Geotrans hat geschrieben:ich denke auch das neue Handbuch ist deutlich wichtiger
Nicht nur. Mir wurde gesagt, es soll auch ein "natürliches Leben" (ohne www) geben. Jürgen

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von Geotrans » Mo, 04.02.2013 21:42

Hallo Robert,
vielen Dank für Deine Hilfe, ich denke auch das neue Handbuch ist deutlich wichtiger :D
Immerhin habe ich jetzt eine Idee für eine Lösung, in dem ich über Abfragen die Zeilen zusammen fasse wie hier viewtopic.php?f=8&t=61075#p227776 dargestellt. Das hat auch den großen Vorteil das ich dann auch schon einen großen Teil meiner Formatierung erledigt habe.

Gruß, Georg

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von RobertG » So, 03.02.2013 18:31

Hallo Georg,

ich habe mir fast so etwas gedacht. Das Ganze erinnerte mich von den Beispielen her an Railroad-Tycoon, das einzige Spiel, das ich eine Zeit lang auch gerne einmal am PC gespielt habe.
Für Deine "Goods" braust Du irgendwo eine Beziehung zwischen den Waren, die geliefert werden und denen, die daraus entstehen. Beispiel für Railroad-Tycoon: Aus Eisen und Kohle macht das Stahlwerk Stahl. Aus Stahl und Obst bzw. Stahl und Kaffee macht die Verpackungsindustrie "Lebensmittel". Diese Beziehungen werden durch Deine Tabellenstruktur nicht geklärt. Das könnte z.B. so eine Tabelle sein:
ID factory_ID Ingood_ID_1 Ingood_ID_2 Ingood_ID_3 Outgood_ID_1 Outgood_ID_2 Outgood_ID_3
Irgendwie musst Du diese Beziehung zueinander definieren. Entweder eben über einen gemeinsamen Datensatz, in dem einmal bei Ingood Eisen und Kohle und bei Outgood Stahl für eine Fabrik steht, bei einer anderen Fabrik Ingood mit Stahl und Kaffee und Outgood mit Lebensmittel steht.

Allerdings fehlt mir dafür im Moment der frie Kopf.

Gruß

Robert

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von juetho » So, 03.02.2013 16:33

Geotrans hat geschrieben:Übrigens vielen vielen Dank für das tolle Handbuch!!! :D Hätte nur einen kleinen Verbesserungsvorschlag, häufig wird auf den Absatz "Referenz nicht gefunden" verwiesen, leider ist der nicht im Inhaltsverzeichnis zu finden und ich suche immer eine Weile bis ich ihn wieder gefunden habe.
Dein Lob für das Handbuch kann ich nur bestätigen, auch wenn ich einzelne Teile anders geschrieben hätte. Aber mir ist bewusst, dass jeder Autor andere Vorlieben hat und Schwerpunkte setzt; außerdem musste Robert das Handbuch Anfang 2012 unter großem Zeitdruck erstellen, damit es überhaupt existierte.

Das Problem "Referenz nicht gefunden" hat nichts mit einem bestimmten Absatz oder Querverweis zu tun, sondern tritt ständig auf: Die Kapitel des Handbuchs werden einzeln geschrieben und enthalten innerhalb eines Kapitels korrekte Querverweise. Aber Querverweise auf andere Kapitel sind anscheinend schief gegangen und nach dem Zusammenfassen der einzelnen Kapitel in ein "Globaldokument" möglicherweise auch Querverweise innerhalb eines Kapitels. (Ich habe irgendwann aufgehört, nach Regeln über funktionierende oder nicht gefundene Referenzen zu suchen.) In der Neufassung des Handbuchs, die Ende März erscheinen soll, will Robert dieses Problem lösen.

Jürgen

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von Geotrans » So, 03.02.2013 13:12

RobertG hat geschrieben: Mir ist einfach nicht klar, warum Deine Tabellen so zusammenhängen. Du scheinst ja im Hintergrund irgendeine vorhandene Datenbank zu haben, die genau das bedingt.
Vielleicht kann ich es mit dem Screenshot von meinem Formular deutlich machen was ich eigentlich erreichen will, ich bin mir ja gar nicht sicher ob meine Datenbank überhaupt richtig strukturiert ist!
In dem Transportsimulationsspiel Simutrans werden die darin enthaltenen Fabriken über verschieden Parameter definiert. Um ein ausgeglichenes Verhältnis zwischen Warenproduktion (Goods) und Warenverbrauch zu erhalten ist nötig, die verschiedenen Parameter der Fabriken anhand von verschiedenen zu berechnenden Werten anzupassen.
Der Screenshot zeigt alle Werte die der Fabrik "neu1" zugeordnet sind. Eine Fabrik kann mehre Waren (Goods) Produzieren, wird als OutputGood definiert. genauso kann sie aber auch mehre Waren verbrauchen = InputGoods.
Auch gibt es Fabriken denen ein oder mehrere Felder (factory_fields) zugeordent sind.
Dann gibt es noch Parameter die nicht in jeder Fabrik vorkommen und die ich auch nicht für die Berechnung brauche, die habe ich in "erweiterungen" ausgelagert.

Bei der Adresse weiß ich nicht ob wir von der gleichen Stelle im Handbuch reden, ich meinte in der Abfrage Leser_Anschrift folgendes:

Code: Alles auswählen

IFNULL( "Geschlecht"."Adressanrede", '' ) || CHAR( 13 ) || "Leser"."Vorname" || ' ' || "Leser"."Nachname" || CHAR( 13 ) || IFNULL( "Strasse"."Strasse" || ' ' || "Adresse"."Nr", '' ) || CHAR( 13 ) || IFNULL( "Adresse"."Land" || ' ', '' ) || IFNULL( "Postleitzahl"."Postleitzahl" || ' ', '' ) || IFNULL( "Ort"."Ort", '' )
Übrigens vielen vielen Dank für das tolle Handbuch!!! :D Hätte nur einen kleinen Verbesserungsvorschlag, häufig wird auf den Absatz "Referenz nicht gefunden" verwiesen, leider ist der nicht im Inhaltsverzeichnis zu finden und ich suche immer eine Weile bis ich ihn wieder gefunden habe.
Dateianhänge
Formular.png
Formular.png (76.68 KiB) 1437 mal betrachtet

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von RobertG » So, 03.02.2013 11:18

Hallo Georg,

die Adresse ergibt sich ja auch aus einer stringenten Folge: Zu einem Namen gibt es genau eine Zuordnung von Straße, Postleitzahl und Wohnort. Nur deshalb kann dabei ein Feld komplett bestückt werden. Das wäre, übertragen auf Deine Tabellen, so, als würdest Du mit "InputGood" beginnen und da dann "factory" zuordnen. Dann kommen die Datensätze von "factory" entsprechend häufig vor. - wie bei der Adresse der Ort.
Um das einmal auf die Adresse zu übertragen:
1. Gruppe wäre der Ort,
2. Gruppe wäre die Postleitzahl,
3. Gruppe wäre die Straße,
4. Gruppe wäre die Hausnummer,
Detail wäre Anrede und Name
... vorausgesetzt das Ganze sollte wirklich bis ins Kleinste, z.B. für ein komplettes Adressbuch einer Stadt, zusammengefasst werden. Vermutlich würde im ländlichen Raum Ort und Postleitzahl zusammengefasst und die Straße zusammen mit der Hausnummer und Anrede sowie Name im Bereich Detail stehen.

Die Adresse bedingt einfach Verdoppelungen, wenn ich, wie im Handbuch, so etwas für eine Bibliothek mache. Schließlich kommen die meisten Leute direkt aus der Umgebung. Du möchtest aber gerade Verdoppelungen bei "factory" vermeiden, da in der Tabelle sehr viele Werte drin stecken.

Mir ist einfach nicht klar, warum Deine Tabellen so zusammenhängen. Du scheinst ja im Hintergrund irgendeine vorhandene Datenbank zu haben, die genau das bedingt.

Alle Felder von "factory" kannst Du natürlich so zusammenfassen, wie ich das im Handbuch gemacht habe.

Gruß

Robert

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von Geotrans » So, 03.02.2013 09:01

In dem Base Handbuch http://wiki.documentfoundation.org/imag ... te_V35.pdf ist die Adresse durch eine Abfrage bereits zu einem Block zusammengefasst. Wäre das vielleicht die Lösung, das ich jeweils aus den Tabellen factory_fields, InputGoods, OutputGoods und Erweiterungen die Wert in einem solchen Block zusammen zu fassen?

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von RobertG » So, 03.02.2013 08:46

Hallo Geoorg,
Geotrans hat geschrieben: Wie würde man denn sinnvollerweise die Datensammlung strukturieren? Wichtig für die Daten ist ja nur das sie der jeweiligen factory zugeordnet werden und das die werte für die Felder/OuputGood/InputGood zusammenbleiben.
Wie sollen diese Felder zusammen bleiben? Die Tabellen geben das nicht her. Du hast hier Werte aus 2 Tabellen, die außer der Beziehung zu factory keine Verbindung haben.
Folgende Konstruktionen sind in Berichten einfach zu bewerkstelligen:
Tabelle 1 hat den Fremdschlüssel in Tabelle 2, die wiederum den Fremdschlüssel in Tabelle 3 hat usw ... - also strikt hierarchisch geordnet. Tabelle 1 würde dann mit dem Primärschlüssel die oberste Gruppe darstellen, Tabelle 2 die nächste Kategorie usw.
Bei Deinen Tabellen kannst Du lediglich Tabelle 1 bestimmen: factory. Alles was in "factory" auftaucht gehört in die Gruppierung. Alle anderen Werte gehören in den Bereich "Detail", da sie außer der Verbindung zu "factory" nichts miteinander zu tun haben.
Geotrans hat geschrieben: Die reine Optik des Berichtes ist für mich übrigens zweitrangig, da ich den Inhalt anschließend in eine reine Textdatei kopiere, bei der ich dann auch durch Suchen und Ersetzen relativ einfach irgendwelche Leerzeilen raus bekomme.
Dann bietet es sich vielleicht an, das Ganze nicht als eine Writer-Datei mit dem Report-Builder zu erstellen. Der macht auch Tabellendokumente. Die haben dann keine Formatierungen. In den Writer-Dateien hingegen wirst Du auf lauter Rahmen stoßen, die eine Abspeicherung als reine Textdatei behindern.

Gruß

Robert

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von Geotrans » So, 03.02.2013 08:08

Hallo Robert,
Vielen Dank für Deine unermüdliche Hilfe!
RobertG hat geschrieben: Mit dem Bericht gestaltet sich das sicher äußerst schwierig - was aber an der Struktur Deiner Datensammlung liegt.
Wie würde man denn sinnvollerweise die Datensammlung strukturieren? Wichtig für die Daten ist ja nur das sie der jeweiligen factory zugeordnet werden und das die werte für die Felder/OuputGood/InputGood zusammenbleiben.
RobertG hat geschrieben: Die Reihenfolge wie bei Dir angegeben wirst Du nie erreichen, da die Image-Dateien alle in einem Feld enthalten sind ...
Die Reihenfolge ist nicht unbedingt so vorgeschrieben, war halt nur so wie ich sie gewohnt bin.
RobertG hat geschrieben: Zu "BackImage..." fällt mir noch auf, dass da einmal gar nichts drin ist, ein anderes Mal ein ganz langer Strang. Einer der besonderen Nachteile des Report-Builders ist, dass die darin enthaltenen Textfelder nicht automatisch ihre Größe anpassen können. Du musst also ein Feld mit genügend Platz für den größten Wert bereitstellen - und das wird in diesem Fall eindutig sehr groß und erscheint in der nächsten Gruppe als freier Bereich.
Da es sich hier noch um eine Datenbank im Versuchsstadium handelt habe ich noch nicht in alle Felder bei BackImage was eingetragen. Später wird bei BackImage immer ein Eintrag sein.Allerdings in sehr Unterschiedlichem Umfang, von einer Zeile bis noch größer wie im oben genannten Beispiel.
Die reine Optik des Berichtes ist für mich übrigens zweitrangig, da ich den Inhalt anschließend in eine reine Textdatei kopiere, bei der ich dann auch durch Suchen und Ersetzen relativ einfach irgendwelche Leerzeilen raus bekomme.

Gruß,
Georg

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von juetho » Sa, 02.02.2013 21:11

RobertG hat geschrieben:Du musst dazu die Verbindungslinie zwischen den beiden Tabellen mit einem rechten Mausklick bearbeiten und auf einen linken oder rechten Verbund einstellen. Mit OJ beginnend soll das Ganze wohl eine Kompatibilität mit ODBC-Verbindungen herstellen, sofern ich z.B. das MySQL-Handbuch richtig deute.
Aha, dann nehme ich das einfach so hin. Und weil ich solche Sachen direkt mit SQL und nicht mit der GUI erledige, ist es auch kein Wunder, dass mir das noch nie begegnet ist. Gruß Jürgen

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von RobertG » Sa, 02.02.2013 20:56

@Jürgen,

die Formulierungen zum {OJ ...} produziert tatsächlich die GUI - auch in LO, wenn Du zumindest mit Base und der internen HSQLDB arbeitest. Du musst dazu die Verbindungslinie zwischen den beiden Tabellen mit einem rechten Mausklick bearbeiten und auf einen linken oder rechten Verbund einstellen. Mit OJ beginnend soll das Ganze wohl eine Kompatibilität mit ODBC-Verbindungen herstellen, sofern ich z.B. das MySQL-Handbuch richtig deute.

Gruß

Robert

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von RobertG » Sa, 02.02.2013 20:45

Hallo Geotrans,

ich habe erst noch einmal eine verbesserte Abfrage, da die letzten Spalten frei blieben:

Code: Alles auswählen

SELECT "factory".*, "factory_fields".*, "field".*, "InputGood".*, "OutputGood".*, "good".*, "good2".*, "erweiterungen".*, "parameter".* 
FROM "factory" 
LEFT JOIN "factory_fields" ON "factory_fields"."factory_ID" = "factory"."ID" 
LEFT JOIN "field" ON "factory_fields"."fields_ID" = "field"."ID" 
LEFT JOIN "InputGood" ON "InputGood"."factory_ID" = "factory"."ID" 
LEFT JOIN "OutputGood" ON "OutputGood"."factory_ID" = "factory"."ID" 
LEFT JOIN "good" ON "InputGood"."Good_ID" = "good"."ID" 
LEFT JOIN "good" AS "good2" ON "OutputGood"."Good_ID" = "good2"."ID" 
LEFT JOIN "erweiterungen" ON "erweiterungen"."factory_ID" = "factory"."ID" 
LEFT JOIN "parameter" ON "erweiterungen"."parameter_ID" = "parameter"."ID"
Mit der anderen Abfrage kamen die beiden "good"-Namenszuordnungen nicht zu Rande.

Mit dem Bericht gestaltet sich das sicher äußerst schwierig - was aber an der Struktur Deiner Datensammlung liegt.
Grundsätzliches zum Bericht: Alle Felder, die Du mit [Index] versiehst, müssten eigentlich in einer Untergruppe erscheinen. Normalerweise muss die Struktur so laufen, dass in dem Detailbereich die meisten Doppler Deiner Auflistungen liegen müssen. Sehe ich allerdings die erste gewünschte Auflistung, so müsste da dann z.B. alles ohne Zusatznummer in die erste Gruppe "factory_name", alle zu "Output ..." bildet eine zweite Gruppe und dann wirds problematisch: "Input ..." müsste die nächste Untergruppe sein. Die Reihenfolge wie bei Dir angegeben wirst Du nie erreichen, da die Image-Dateien alle in einem Feld enthalten sind ...

Zu "BackImage..." fällt mir noch auf, dass da einmal gar nichts drin ist, ein anderes Mal ein ganz langer Strang. Einer der besonderen Nachteile des Report-Builders ist, dass die darin enthaltenen Textfelder nicht automatisch ihre Größe anpassen können. Du musst also ein Feld mit genügend Platz für den größten Wert bereitstellen - und das wird in diesem Fall eindutig sehr groß und erscheint in der nächsten Gruppe als freier Bereich.

Gruß

Robert

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von Geotrans » Sa, 02.02.2013 18:05

Opensuse 12.1
LibreOffice 3.5:build-413
Build-ID: 350m1(Build:413)

wenn ich "Bericht in Entwurfsansicht erstellen..." auswähle kann ich mehr Gruppierungen erstellen. Wenn ich "Bericht unter Verwendung des Assistenten" auswähle dann gibt es nur 4, die ich dann nach verlassen des Assistenten auch auf mehr erweitern. Ich war mir nur nicht ganz sicher ob das dann auch wirklich funktioniert.

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von RobertG » Sa, 02.02.2013 17:57

Hallo Geotrans,

Kurz zum Bericht:

Wenn ich lese, dass der Bericht maximal nach 4 Gebieten gruppieren kann, dann versuchst Du das Ganze vermutlich mit dem (alten) Berichtserstellungsmodul. Das ist immer aktiv, wenn der Report-Generator nicht installiert wurde.
Zum Gruppieren und nachherigen Bearbeiten eignet sich der Report-Generator deutlich besser. Bei dem kannst Du in eine Gruppierung auch gleich mehrere Felder aufnehmen, die z.B. immer zu einem Datensatz einer Tabelle gehören.

Mit welchem System arbeitest Du?

Gruß

Robert

Re: Abfrage über mehrere Tabellen für einen Bericht erstelle

von Geotrans » Sa, 02.02.2013 17:35

Das gewünschte Endergebnis meines Berichts soll so aussehen (für die ersten beiden Datensätze aus meinem Formular, "factory"."ID" 13+14) :
factory_name=neu1
DistributionWeight=1
Productivity=600
Range=200
electricity_boost=700
passenger_boost=200
mail_boost=100
copyright=Geotrans
Location=Land
MapColor=95
OutputGood[0]=Dachziegel
OutputCapacity[0]=800
OutputFactor[0]=80
InputGood[0]=Cement
InputFactor[0]=100
InputCapacity[0]=1000
InputSupplier[0]=20
InputGood[1]=Diesel
InputFactor[1]=50
InputCapacity[1]=60
InputSupplier[1]=3
BackImage[0][0][0][0][0][0]=alm.0.0
BackImage[0][0][1][0][0][0]=alm.0.1
BackImage[0][0][2][0][0][0]=alm.0.2
BackImage[0][1][0][0][0][0]=alm.0.3
BackImage[0][1][1][0][0][0]=alm.0.4
BackImage[0][1][2][0][0][0]=alm.0.5
BackImage[0][2][0][0][0][0]=alm.1.0
BackImage[0][2][1][0][0][0]=alm.1.1
BackImage[0][2][2][0][0][0]=alm.1.2
BackImage[1][0][0][0][0][0]=alm.1.3
BackImage[1][0][1][0][0][0]=alm.1.4
BackImage[1][0][2][0][0][0]=alm.1.5
BackImage[1][1][0][0][0][0]=alm.2.0
BackImage[1][1][1][0][0][0]=alm.2.1
BackImage[1][1][2][0][0][0]=alm.2.2
BackImage[1][2][0][0][0][0]=alm.2.3
BackImage[1][2][1][0][0][0]=alm.2.4
BackImage[1][2][2][0][0][0]=alm.2.5
BackImage[2][0][0][0][0][0]=alm.3.0
BackImage[2][0][1][0][0][0]=alm.3.1
BackImage[2][0][2][0][0][0]=alm.3.2
BackImage[2][1][0][0][0][0]=alm.3.3
BackImage[2][1][1][0][0][0]=alm.3.4
BackImage[2][1][2][0][0][0]=alm.3.5
BackImage[2][2][0][0][0][0]=alm.4.0
BackImage[2][2][1][0][0][0]=alm.4.1
BackImage[2][2][2][0][0][0]=alm.4.2
BackImage[3][0][0][0][0][0]=alm.4.3
BackImage[3][0][1][0][0][0]=alm.4.4
BackImage[3][0][2][0][0][0]=alm.4.5
BackImage[3][1][0][0][0][0]=alm.5.0
BackImage[3][1][1][0][0][0]=alm.5.1
BackImage[3][1][2][0][0][0]=alm.5.2
BackImage[3][2][0][0][0][0]=alm.5.3
BackImage[3][2][1][0][0][0]=alm.5.4
BackImage[3][2][2][0][0][0]=alm.5.5

factory_name=neu2
DistributionWeight=6
Productivity=600
Range=150
electricity_boost=900
passenger_boost=500
mail_boost=500
max_fields=20
min_fields=5
fields[0]=Gemüse
production_per_field[0]=300
spawn_weight[0]=60
probability_to_spawn[0]=70
fields[1]=Hopfenfeld
production_per_field[1]=400
spawn_weight[1]=40
probability_to_spawn[1]=80
OutputGood[0]=Aepfel
OutputCapacity[0]=1000
OutputFactor[0]=60
OutputGood[1]=Birnen
OutputCapacity[1=2000
OutputFactor[1]=50
OutputGood[2]=Bier
OutputCapacity[2]=3000
OutputFactor[2]=100
OutputGood[3]=Diesel
OutputCapacity[3]=200
OutputFactor[3]=100
OutputGood[4]=Cement
OutputCapacity[4]=1000
OutputFactor[4]=500

Die Werte in den eckigen Klammern müssten durch einen Zähler ermittelt werden. Ich habe aber keine Idee (mehr) nach welchen Feldern ich Gruppieren muss um auch nur annähernd eine solche Zusammenfassung zu bekommen, bzw. ob überhaupt meine Abfrage dafür richtig ist.

Nach oben