Wie kann ich verschiedene Zellen einer Spalte verbinden

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

schleiereule
*
Beiträge: 10
Registriert: Mi, 19.01.2011 12:08

Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von schleiereule »

Hallo,
ich habe jetzt schon seit zwei Tagen das Forum durchsucht, bin aber nicht fündig geworden: Ich habe folgendes Problem: zu verschiedenen Projekten (Projekt 1, 2 usw.) sind verschiedene Positionen nötig (z.B. Maler, Maurer...). In zwei unterschiedlichen Tabellen habe ich diese jeweils eingetragen und miteinander verknüpft. In einer Abfrage mit GROUP BY "Projekt" ist das Ergebnis dann:
Projekt1 Maler
Projekt1 Maurer
Projekt1 Schreiner usw.
nun möchte ich aber nur eine Zeile, in der steht:
Projekt1 Maler, Maurer, Schreiner

Bei Zahlenfeldern wäre es ja leicht über die SUM- Funktion, aber wie geht das als Aufzählung des Textes?

In einem Bericht würde es ja ganz leicht über die Gruppierungsbereiche gehen, ich brauche es aber in einer Tabellenzeile.
Für eine Lösung wäre ich euch sehr dankbar.
Viele Grüße
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von F3K Total »

Hallo,
wie sind denn deine Tabellen aufgebaut?
Ohne genauere Kenntnis welche Spalten es gibt und wie sie verknüpft sind ist eine Anwort schwierig.

G R
schleiereule
*
Beiträge: 10
Registriert: Mi, 19.01.2011 12:08

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von schleiereule »

Erst einmal vielen Dank dafür, dass Sie mir helfen wollen.
ich habe eine Tabelle "Veranstaltung" wie folgt:
ID
Veranstaltungsname
Veranstaltungsbeschreibung
...


eine zweite Tabelle "Instrument" mit

ID
Instrument
Anzahl
Einzelpreis
Nebenkosten
Veranstaltungsnr
...

es geht hierbei um Orchesterbesetzungen, Instrument ist z.b. Violine, gemeint sind natürlich, wie viele Spieler ich brauche.

verknüpft ist das Ganze über ID in "Veranstaltung" zu Veranstaltungsnr in Tabelle "Instrument", 1:n - Beziehung.

Ich möchte eine Abfrage, in der z.B. erscheint:

Konzert xy 2 x Violine, 1 x Viola

Das 2 x Violine mach ich über
SELECT "Veranstaltungsname", "Instrument", "Anzahl" , "Anzahl" + ' x ' + "Instrument" AS "Instrumente" FROM "Veranstaltung" AS "Veranstaltung", "Instrument" AS "Instrument"
Aber dann habe ich eben viele Zeilen, in jeder nur ein Instrument, ich möchte aber alle in einer Zeile.
Vielen Dank schon mal im Voraus für eure Bemühungen.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von F3K Total »

Hi,
wieviele unteschiedliche Instrumente willst Du verarbeiten?

Gruß R
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von AndreasJBittner »

Hallo,

probier mal Dein SELECT am Ende mit GROUP BY "Projekt1", "Handwerker",... zu erweitern, dann kann das so aussehen:

Projekt1 ___ Maurer ___ xyz
___________Maler__ ___abc
_____________________def

Nach group by darf nur noch order by oder having ... stehen.

Wenn Du Zahl und 'x' und Instrument verbinden willst, dann geht das mit SELECT Anzahl || 'x ' || Instrument ... oder
CONCAT(Anzahl, CONCAT('X ', Instrument))

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von DPunch »

Aloha
schleiereule hat geschrieben:Ich möchte eine Abfrage, in der z.B. erscheint:

Konzert xy 2 x Violine, 1 x Viola
Eine solche Darstellung wirst Du mit der HSQLDB ohne z.B. Makros nicht hinbekommen.
schleiereule
*
Beiträge: 10
Registriert: Mi, 19.01.2011 12:08

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von schleiereule »

Vielen Dank für eure Antworten, ich glaube auch, ohne Makro geht es nicht, denn es sind sehr viele Instrumente.
Dann versuche ich es mal im Makro-Bereich.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von F3K Total »

Hallo zusammen,
das sehe ich anders, ich bin auch kurz vor einer Lösung innerhalb HSQLDB.
Daher nochmal die Frage, wieviele unterschiedliche Instumente willst Du pro Veranstaltung verarbeiten?

Komme erst abends dazu, das Ding zu Ende zu führen.

Gruß R
schleiereule
*
Beiträge: 10
Registriert: Mi, 19.01.2011 12:08

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von schleiereule »

Hallo, vielen Dank für eure Bemühungen. Bisher sind es 40 verschiedene Instrumente, es kommen aber sicher noch 10 verschiedene dazu.
Also nicht gerade wenig...
Viele Grüße
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von F3K Total »

Hallo,
wie heute mittag angekündigt bin ich der Meinung, dass es geht.
Anbei schon mal eine DB, die 7 Instrumente nebeneinander anordnen kann, schau mal in die View "Auswertung_fertig".
In einer weiteren View, die noch nicht fertig ist, werden dann die Spalten aus "Auswertung_fertig" verkettet (Concat/||/++), natürlich mit einem Komma dazwischen.
Jetzt braucht man das Ganze "nur" noch um 43 Instrumente erweitern.
Nachteil: Viel Arbeit
Vorteil: absolut dynamisch

Ich mach mal weiter.

Gruß R

So, nun bin ich fertig. Siehe Anhang "Veranstaltungen2.odb"
Die DB kann bis zu 50 verschiedene Instrumente pro Veranstaltung in eine Zeile schreiben.
Im Formular "Veranstaltungen" kannst Du es direkt ausprobieren.

Gruß R

Habe die Datei "Veranstaltungen2.odb" noch mal ausgetauscht, weil in der neuen Version die 50 Views besser geordnet sind.

Gruß R
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von DPunch »

Aloha
F3K Total hat geschrieben:wie heute mittag angekündigt bin ich der Meinung, dass es geht.
Natürlich muss ich Dir erstmal allen Respekt zollen für die Arbeit, die Du Dir gemacht hast.
Allerdings hat das natürlich rein gar nichts mit "absolut dynamisch" zu tun, wenn das Ganze sowohl durch physische Geschaffenheiten (Tabellen), als auch durch die Abfragen von vornherein limitiert ist.
Klar kann man per Holzhammer-Methode fast alles irgendwie machen, aber diese Herangehensweise widerspricht prinzipiell allem, wofür das Arbeiten mit einer Datenbank so steht.
schleiereule
*
Beiträge: 10
Registriert: Mi, 19.01.2011 12:08

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von schleiereule »

Trotz der Antwort von DPunch.

Ganz, ganz herzlichen Dank für diese Lösung. Sicher, sie ist umständlich, aber sie funktioniert.
Jetzt bin ich einen großen Schritt weiter.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von F3K Total »

Hallo DPunch,
Ok, "absolut" ist wohl übertrieben.
Was aber ist verkehrt an meiner Lösung?
Meinst Du nicht, dass man mit einem Billig-Laptop wie meinem, selbst wenn man jeden Tag eine Veranstaltung hat, was bei meiner Restlaufzeit etwa 15000 Konzerte wären, problemlos klarkommt?
Leider habe ich mit HSQL noch keine andere Methode als die Dargestellte gefunden, mit der man aus einer Spalte mehrere machen kann.
Und, wo läge der Vorteil eines Makros?
Wenn ich das richtig einschätze, müßte man mit einem Makro einen neuen, zusätzlichen Speicherbereich für die verketteten Daten anlegen.
Eine weitere Tabelle oder Tabellenspalte?
Widerspricht das nicht ebenso der Arbeit mit einer Datenbank, könnte es nicht zur Inkonsistenz kommen?

Gruß R

PS: Die SQL-Views habe ich per "Makro" vervielfältigt und dann direkt ins gezipte "database/script" geschrieben, insofern ging es recht zügig. :D
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von F3K Total »

Hallo Schleiereule,
ich habe noch ein Makro geschrieben, das die Dateneingabe deutlich vereinfacht:
Im Formular der Dateneingabe "Veranstaltungen" findest Du jetzt im Tabellenkontrollfeld für die Eingabe der Instrumente ein Listenfeld in der Spalte "Instrument". Die Liste dieses Listefeldes enthält beim Anlegen einer neuen Veranstaltung alle Instrumente die bisher je vorgekommen sind. Sobald Du ein Instrument ausgewählt hast, verschwindet es aus der Auswahlliste. So Kannst Du keinen Instrumententyp doppelt eingeben. Ausserdem reduziert sich die Zahl der noch verfügbaren Instrumente mit jedem gewählten, so dass die Auswahl schneller geht.

Gruß R
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Wie kann ich verschiedene Zellen einer Spalte verbinden

Beitrag von DPunch »

Aloha
F3K Total hat geschrieben:Was aber ist verkehrt an meiner Lösung?
Dass es keine Herangehensweise beim ernsthaften Arbeiten mit Datenbanken ist.
Und nicht dass wir uns da falsch verstehen: ich will Dir in keinster Weise Deine Arbeit madig machen, schon gar nicht, wenn Du damit jemandem den Tag versüsst hast.
F3K Total hat geschrieben:Leider habe ich mit HSQL noch keine andere Methode als die Dargestellte gefunden, mit der man aus einer Spalte mehrere machen kann.
Dem ist in der Tat so, im Gegensatz zu z.B. MySQL mit GROUP_CONCAT bietet die HSQLDB nichts derartiges.
F3K Total hat geschrieben:Und, wo läge der Vorteil eines Makros?
Wenn ich das richtig einschätze, müßte man mit einem Makro einen neuen, zusätzlichen Speicherbereich für die verketteten Daten anlegen.
Nein, natürlich nicht - man kann mit Makros ja problemlos ein tatsächlich dynamisches Formular zum Formatieren und Darstellen der gewünschten Daten füllen.
Und das ist eben der Unterschied zu Deiner Arbeit mit X Views und Abfragen: Du verwendest die Datenbank selber, um eine Formatierung zu erzwingen. Datenbanken sind aber nicht (bzw nur in sehr rudimentärem Masse) dafür gedacht, nach Wunsch formatierte Ausgaben zu erzeugen, sondern lediglich die Daten vorzuhalten.
Die Aufbereitung dieser Daten sollte auf jeden Fall auf einer anderen Ebene geschehen (->Formular).

Aber gut, eigentlich wollte ich gar keine Grundsatzdiskussion anregen, sondern lediglich davon abraten, solche Wege als praktikable Lösung zu betrachten. Ohne Dir dabei zu nahe treten zu wollen.
Antworten