BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
white_rabbit
Beiträge: 15
Registriert: Mi 8. Jun 2016, 19:26

Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von white_rabbit » Sa 19. Nov 2022, 19:04

Hallo.
Ich bin in Sachen base ein Newbie und habe daher eine Frage, die die Wizzzzards hier vermutlich schnell beantworten können.

Bei meiner Frage geht es darum, ob man besser Calc oder Base verwendet, um das folgende Problem zu lösen.
Ich habe eine Kursbelegung, die z.B. so aussieht:

Code: Alles auswählen

ID;Nachname;Rufname;1as;1bi;1ch;1de;1ek;1en;1fr;1ge;1gr;1if;1ku;1la;1ma;1mu;1nw;1ph;1pl;1po;1pr;1re;1rk;1sn;1sp;1st;1tg;1wm;
0001;Blümchen;Benjamin;1bi;  ;1de;1ek;1en;1fr;1ge; ; ; ; ;1ma;1mu; ;1ph; ;1po;1pr;1re; ;1sn;1sp; 
0002;Blocksberg;Bibi; ;  ; ;1de;1ek;1en; ;1ge; ; ;1ku;1la;1ma; ; ;1ph; ;1po;1pr; ;1rk;1sn;1sp;1st;
0003;Man;Spider;1bi;1ch;1de;1ek;1en;1fr;1ge; ;1if;1ku; ;1ma; ; ; ; ;1po;1pr;1re; ;1sn;1sp; 
0004;Man;Super; ;1bi; ;1de;1ek;1en; ;1ge; ;1if; ;1la;1ma;1mu; ;1ph; ;1po;1pr;1re; ; ;1sp;1st;1wm;
....
Diese CSV-Tabelle ändert sich von Jahr zu Jahr und muss jährlich neu importiert werden. Darauf basiert die Auszählung, wie viele Leute sich z.B. 1bi usw befinden. Nun ist es so, dass in einer zweiten Tabelle steht:

Code: Alles auswählen

Kurs; Preis; Code; Zahlung
1bi 5,00€  WEB-14-12345 jährlich
1ch 3,50€  WEB-22-4567 jährlich
1de 5,00€  WEB-23-89111 jährlich
1en 4,00€  WEB-05-1234 einmalig
Das ganze soll letztlich in einem Bericht pro Person enden, der am Ende so aussehen soll:

Code: Alles auswählen

Blümchen;Benjamin  
BI 5,00€
CH --
DE 5,00€
EN  4,00€
Summe:  14€

Blockberg; Bibi    
BI  --
CH --
DE 5,00€
EN 4,00€
Summe: 9€
...
Eigentlich habe ich das bisher mit Calc gemacht, doch das wurde es mit der Zeit ziemlich unübersichtlich und fehleranfällig (durch das Copy & Paste). Daher dachte ich, dass es mit Base vielleicht besser geht ... wenn ich die Abfragen so gestalten kann, dass ich nach einem beliebigen Kurs filtern kann und anschließend so einen Bericht pro Kursteilnehmer ausgeben lassen kann. Wie schätzt Ihr das ein bzw welches Werkzeug ist das bessere für dieses Problem?
Viele Grüße.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von RobertG » Sa 19. Nov 2022, 20:22

Das, was Du da machen willst, ist eine typische Datenbankaufgabe. In der Hauptsache verwaltest Du Datensätze, nebenher führst Du noch kleine Rechnungen durch. Da stellt eine Datenbank die Integrität der Daten sicher und Du hast nicht plötzlich z.B. Zuweisungen zu Kursen, die es überhaupt nicht gibt.

Und wenn ich die Überschrift sehe: Bei der Verwendung von Calc als Datengrundlage kannst Du nur einzelne Tabellen abfragen. Auch hier gilt: Interne Datenbank (HSQLDB) benutzen.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

white_rabbit
Beiträge: 15
Registriert: Mi 8. Jun 2016, 19:26

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von white_rabbit » So 20. Nov 2022, 12:10

Hallo.
Ok -- dann werde ich mich mit base / SQL weiter beschäftigen ... mein Problem, das ich gerade habe, ist eine Abfrage, die nur dann etwas ausspuckt, wenn der Kurs auch belegt ist. Also konkret:
Für Bibi Blocksberg sollen natürlich nur die Kurse aufgelistet werden, die auch belegt wurden -- davon hängt dann ab, dass der Preis (Summe über alle Zeilen) natürlich nur dann berechnet werden soll, wenn der Kurs auch belegt wurde.
Wie müsste man das per Base/SQL umsetzen?

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von F3K Total » So 20. Nov 2022, 13:06

Moin,
Beispieldatei anbei.
Gruß R
Dateianhänge
Kursbelegung.zip
Nur entpacken
(16.72 KiB) 65-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO

white_rabbit
Beiträge: 15
Registriert: Mi 8. Jun 2016, 19:26

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von white_rabbit » So 20. Nov 2022, 16:17

Wow -- Super! Danke! Das funktioniert schon mal erstklassig. :D
Problematisch dürfte es noch sein, dass die CSV-Datei als Übersicht über alle so kommt wie oben angegeben ... die ist also nicht direkt auf 2 Tabelle verteilt. Dann muss man vermutlich mit einer Abfrage passend filtern, oder?

Und noch eine Frage zu deiner Datei: Wenn man die Übersicht über die Tabellen öffnet, erscheint bei vRechnungen ein anderes Symbol als bei den "normalen" Tabellen. Was hat es damit auf sich bzw wie hast Du das dort eingefügt?

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von F3K Total » So 20. Nov 2022, 18:16

white_rabbit hat geschrieben:
So 20. Nov 2022, 16:17
Was hat es damit auf sich bzw wie hast Du das dort eingefügt?
Hallo,
vRECHNUNGEN ist eine Ansicht, Rechtsklick, in SQL-Ansicht bearbeiten ..., dann siehst du was dahinter steckt.
Tja, und wenn die .csv-Datei immer so ankommt wie oben angegeben, dann wird es schwierig.
Anbei mal ein Beispiel, wie man eine .csv Datei als TEXT TABLE in eine HSQL-Datenbank zur Laufzeit importieren kann.
Dazu habe ich folgende SQL-Befehle ausgeführt:

Code: Alles auswählen

CREATE TEXT TABLE "T_DATA_IMPORT"("ID" INTEGER NOT NULL PRIMARY KEY,"Nachname" VARCHAR(50),"Rufname" VARCHAR(50),"1as" VARCHAR(50),"1bi" VARCHAR(5),"1ch" VARCHAR(5),"1de" VARCHAR(5),"1ek" VARCHAR(5),"1en" VARCHAR(5),"1fr" VARCHAR(5),"1ge" VARCHAR(5),"1gr" VARCHAR(5),"1if" VARCHAR(5),"1ku" VARCHAR(5),"1la" VARCHAR(5),"1ma" VARCHAR(5),"1mu" VARCHAR(5),"1nw" VARCHAR(5),"1ph" VARCHAR(5),"1pl" VARCHAR(5),"1po" VARCHAR(5),"1pr" VARCHAR(5),"1re" VARCHAR(5),"1rk" VARCHAR(5),"1sn" VARCHAR(5),"1sp" VARCHAR(5),"1st" VARCHAR(5),"1tg" VARCHAR(5),"1wm" VARCHAR(5))
Nachdem die TEXT-Tabelle definiert ist, muss man die .csv verbinden:

Code: Alles auswählen

SET TABLE "T_DATA_IMPORT" SOURCE "DataImport.csv;fs=\semi;ignore_first=true;all_quoted=false;quoted=false;encoding=UTF-8"
möchte man die Verbindung wieder aufheben, geht das mit

Code: Alles auswählen

SET TABLE "T_DATA_IMPORT" SOURCE OFF
Mit folgender Ansicht, vKONTAKTE_KURSE, kann man die Daten in die gewünschte Reihenfolge bringen:

Code: Alles auswählen

SELECT "ID" AS FK_ID_KONTAKT, "1as" AS FK_ID_KURS FROM "T_DATA_IMPORT" WHERE "1as" IS NOT NULL
UNION SELECT "ID", "1bi" FROM "T_DATA_IMPORT" WHERE "1bi" IS NOT NULL
UNION SELECT "ID", "1ch" FROM "T_DATA_IMPORT" WHERE "1ch" IS NOT NULL
UNION SELECT "ID", "1de" FROM "T_DATA_IMPORT" WHERE "1de" IS NOT NULL
UNION SELECT "ID", "1ek" FROM "T_DATA_IMPORT" WHERE "1ek" IS NOT NULL
UNION SELECT "ID", "1en" FROM "T_DATA_IMPORT" WHERE "1en" IS NOT NULL
UNION SELECT "ID", "1fr" FROM "T_DATA_IMPORT" WHERE "1fr" IS NOT NULL
UNION SELECT "ID", "1ge" FROM "T_DATA_IMPORT" WHERE "1ge" IS NOT NULL
UNION SELECT "ID", "1gr" FROM "T_DATA_IMPORT" WHERE "1gr" IS NOT NULL
UNION SELECT "ID", "1if" FROM "T_DATA_IMPORT" WHERE "1if" IS NOT NULL
UNION SELECT "ID", "1ku" FROM "T_DATA_IMPORT" WHERE "1ku" IS NOT NULL
UNION SELECT "ID", "1la" FROM "T_DATA_IMPORT" WHERE "1la" IS NOT NULL
UNION SELECT "ID", "1ma" FROM "T_DATA_IMPORT" WHERE "1ma" IS NOT NULL
UNION SELECT "ID", "1mu" FROM "T_DATA_IMPORT" WHERE "1mu" IS NOT NULL
UNION SELECT "ID", "1nw" FROM "T_DATA_IMPORT" WHERE "1nw" IS NOT NULL
UNION SELECT "ID", "1ph" FROM "T_DATA_IMPORT" WHERE "1ph" IS NOT NULL
UNION SELECT "ID", "1pl" FROM "T_DATA_IMPORT" WHERE "1pl" IS NOT NULL
UNION SELECT "ID", "1po" FROM "T_DATA_IMPORT" WHERE "1po" IS NOT NULL
UNION SELECT "ID", "1pr" FROM "T_DATA_IMPORT" WHERE "1pr" IS NOT NULL
UNION SELECT "ID", "1re" FROM "T_DATA_IMPORT" WHERE "1re" IS NOT NULL
UNION SELECT "ID", "1rk" FROM "T_DATA_IMPORT" WHERE "1rk" IS NOT NULL
UNION SELECT "ID", "1sn" FROM "T_DATA_IMPORT" WHERE "1sn" IS NOT NULL
UNION SELECT "ID", "1sp" FROM "T_DATA_IMPORT" WHERE "1sp" IS NOT NULL
UNION SELECT "ID", "1st" FROM "T_DATA_IMPORT" WHERE "1st" IS NOT NULL
UNION SELECT "ID", "1tg" FROM "T_DATA_IMPORT" WHERE "1tg" IS NOT NULL
UNION SELECT "ID", "1wm" FROM "T_DATA_IMPORT" WHERE "1wm" IS NOT NULL
Beispiel anbei, .csv und .odb müssen im gleichen Ordner liegen.

Gruß R
Dateianhänge
Kursbelegung_Texttable.zip
nur entpacken
(9.41 KiB) 59-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO

white_rabbit
Beiträge: 15
Registriert: Mi 8. Jun 2016, 19:26

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von white_rabbit » Mo 21. Nov 2022, 15:00

Nochmal danke -- hätte nicht gedacht, dass es so kompliziert wird.
Ich hatte gehofft, dass man die Liste der Belegung irgendwie einfacher mit SQL auswerten lassen kann ... also in etwa sowas wie "wenn der Eintrag in der Spalte nicht leer ist, soll er gewertet werden". Ich kann die CSV-Datei auch so erzeugen, dass bei Belegung des Kurses nur ein "x" erscheint und nicht immer der ganze Kursname. Das ändert am Prinzip aber natürlich nichts.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von RobertG » Mo 21. Nov 2022, 16:25

Wenn Du jedes Jahr eine neue *.csv-Datei bekommst - wird dann der alte Inhalt gelöscht? Ich sehe in Deiner Aufstellung nirgendwo ein Datum. Ich sehe auch ein Feld "ID", das anscheinend mit '1' startend durchnummeriert ist.

Du schreibst, dass sämtliche Inhalte in einer Tabelle stehen. Du willst dabei anscheinend nur auswerten, gar nichts bei den Daten ändern - richtig?

Ich würde an Deiner stelle einmal so eine *.csv-Datei anonymisiert mit lediglich ein paar unterschiedlichen Datensätzen zur Verfügung stellen. Kann ja sein, dass es reicht, jährlich eine Tabelle zu leeren und den neuen Inhalt einzufügen …

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von F3K Total » Mo 21. Nov 2022, 16:54

Moin,
white_rabbit hat geschrieben:
Mo 21. Nov 2022, 15:00
hätte nicht gedacht, dass es so kompliziert wird.
EIgentlich ist es nicht kompliziert, wenn das Konstrukt einmal funktioniert, brauchst du nur die .csv Datei, allerdings mit gleicher Benennung, auszutauschen, die .odb öffnen und fertig.
Ein Problem sehe ich nur dann, wenn Kurse hinzukommen, dann muss die Tabelle T_KURSE erweitert und die Ansicht vKONTAKTE_KURSE entsprechend angepasst werden.
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

white_rabbit
Beiträge: 15
Registriert: Mi 8. Jun 2016, 19:26

Re: Calc vs. Base: Abfrage über mehrere Tabellen -- wie realiseren?

Beitrag von white_rabbit » Mo 21. Nov 2022, 17:55

Hi.
RobertG hat geschrieben:
Mo 21. Nov 2022, 16:25
Wenn Du jedes Jahr eine neue *.csv-Datei bekommst - wird dann der alte Inhalt gelöscht? Ich sehe in Deiner Aufstellung nirgendwo ein Datum. Ich sehe auch ein Feld "ID", das anscheinend mit '1' startend durchnummeriert ist.
Ja, der alte Inhalt kann dann weg. Es handelt sich hier um die Verwaltung von Jahreslizenzen, die -wie der Name schon sagt-jedes Jahr neu fällig werden. Das heißt dann also auch, dass die Anzahl pro Kurs neu bestimmt werden muss und dass die Kosten, die jeder Teilnehmer für diese Lizenzen zahlen muss, stimmen müssen.
Die ID ist eine eindeutige Nummer -- die habe ich der Einfachheit in dem Bsp oben auf 00001 usw geändert. Tatsächlich ist es eine 7-stellige Ziffer, die eindeutig dem Teilnehmer zugeordnet wird.
RobertG hat geschrieben:
Mo 21. Nov 2022, 16:25
Du schreibst, dass sämtliche Inhalte in einer Tabelle stehen. Du willst dabei anscheinend nur auswerten, gar nichts bei den Daten ändern - richtig?
Richtig -- es geht eigentlich nicht um die Änderung der Daten sondern nur um das Auszählen und das Berechnen der Endsumme pro Kursteilnehmer. Wie gesagt: Bisher lief das unter Calc (bzw auch MS-Excel) aber es wurde damit kompliziert einen Bericht zu erstellen, aus dem dann hervorgeht, wie viel jeder einzelne für die Lizenzen zahlen muss.
RobertG hat geschrieben:
Mo 21. Nov 2022, 16:25
Ich würde an Deiner stelle einmal so eine *.csv-Datei anonymisiert mit lediglich ein paar unterschiedlichen Datensätzen zur Verfügung stellen. Kann ja sein, dass es reicht, jährlich eine Tabelle zu leeren und den neuen Inhalt einzufügen …
Habe ich doch oben gemacht ... oder soll die noch länger sein? In der Praxis umfasst die CSV-Datei nicht 5 Zeilen sondern 150 Zeilen ... das kann ich nicht so schnell anonymisieren.

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten