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. 🤗

[gelöst] String aus Abfrage teilen und zählen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
tino1003870
Beiträge: 9
Registriert: Mi 21. Mär 2012, 13:41

[gelöst] String aus Abfrage teilen und zählen

Beitrag von tino1003870 » Mo 5. Sep 2022, 17:21

Hallo zusammen,

ich nutze Base um in unserem ERP-System verschiedene Daten auszulesen.
Ich bekomme mit dieser Abfrage die Daten, die ich brauche:

Code: Alles auswählen

SELECT * FROM "v_wtd_pze_monabrg" WHERE "jahr" = 2022 AND "c_list_tagtypen" LIKE '%x K%' ORDER BY "krz", "jahr", "monat"
Abfrage-Antwort:

Code: Alles auswählen

krz	jahr	monat	c_list_tagtypen
MA1	2022	1	16x FN:5x K
MA2	2022	3	18x FN:4x K
MA3	2022	2	10x BN:10x K
MA3	2022	6	10x BN:11x U:9x K
MA4	2022	8	13x FN:4x U:6x K
MA5	2022	1	1x K:20x BN
MA5	2022	2	19x BN:1x K
MA5	2022	3	14x BN:9x K
MA5	2022	4	18x BN:1x K
MA5	2022	5	17x BN:3x K
MA5	2022	7	15x BN:1x K:5x U
MA5	2022	8	15x BN:8x K
In der letzten Spalte "c_list_tagtypen" befindet sich ein String, der die Anzahl der Schichten der Mitarbeiter enthält, durch Doppelpunkt getrennt.

Kann ich die SQL-Funktion "COUNT(*)" irgendwie nutzen, um die Zahlen aus dem String heraus zu bekommen und zusammenzählen zu lassen oder läuft es auf ein Makro hinaus?
SUBSTRING geht ohne Suchfunktion nicht, weil die Reihenfolge der Einträge variiert, "K" steht nicht immer am Ende.

Falls Makro, dann würde ich es so tun:
- Ausführen der Abfrage ... keine Ahnung im Moment
- String in Array mit ":" als Trenner
- Ziffern vor "x" extrahieren und in Integer wandeln, falls Schicht="K"

InStr kenne ich. Die Umwandlung in Zahlen bekomme ich hin. Ausführen der Abfrage ist mir bisher schleierhaft.

SQL wäre mir aber lieber, falls es geht.

Möchte mir jemand helfen oder hat Tipps?

Danke fürs lesen :-)
Zuletzt geändert von tino1003870 am Mi 7. Sep 2022, 16:37, insgesamt 1-mal geändert.

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

Re: String aus Abfrage teilen und zählen

Beitrag von RobertG » Mo 5. Sep 2022, 17:45

Mit welcher zugrundeliegenden Datenbank arbeitest Du denn? Davon hängt ab, welche SQL-Befehle möglich wären. COUNT() hilft Dir sicher nicht, weil das nur die Anzahl der Datensätze zählt.

Insgesamt scheint mir das einfacher, das Ganze über ein Makro zu lösen. Lade Dir doch einfach einmal das handbuch Base herunter. Da steht drin, wie Du Abfrage stellst, ausliest usw. Entweder hier: https://de.libreoffice.org/get-help/documentation/ oder auch direkt auf meiner Homepage https://www.familiegrosskopf.de/robert/. Auf der Homepage kannst Du auch die einzelnen Kapitel direkt lesen. Für Dich von Bedeutung ist Kapitel 9 https://www.familiegrosskopf.de/robert/ ... kros.xhtml.

Im Prinzip läuft das Auslesen so: Zuerst ein Kontakt zur Datenbank herstellen, dann eine SQL-Befehl zusammenstellen und in eine Variable oResult einlesen. Diese Variable durchlaufen mit

Code: Alles auswählen

WHILE oResult.Next
	stTest = oResult.getString(1) ' erstes Feld
	… tue hier etwas mit dem String …
WEND
Und dann kannst Du mit weiteren Werkzeugen Deinen zusammengestückelten String auslesen.
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

tino1003870
Beiträge: 9
Registriert: Mi 21. Mär 2012, 13:41

Re: String aus Abfrage teilen und zählen

Beitrag von tino1003870 » Mi 7. Sep 2022, 15:29

Hallo Robert,

vielen vielen Dank für deine Hinweise.
Ich habe es soweit per Makro geschafft, die nötigen Infos zu extrahieren.
Ich hab dann alles in einer Calc-Tabelle fallen lassen.
Die nächste Aufgabe in Base wäre wohl die Präsentation der Daten.
Rein theoretisch betrachtet, wäre wohl eine Tabelle in einem Formular sinnvoll. Aber da ich mit den Daten noch mehr rechnen muss, bleibt die Base-Lösung nur Option 2. Der Umgekehrte Weg, den Abruf aus Calc heraus zu starten, wäre bestimmt der bessere gewesen.

Auf jeden Fall wollte ich meinen Dank für die Hinweise noch los werden.

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