In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Anoushka
**
Beiträge: 49
Registriert: Fr, 24.07.2020 15:59

In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Beitrag von Anoushka »

Hallo,

ich komm mit einer gewünschten Funktion einfach nicht weiter. Seit 3 Tagen versuche ich es umzusetzen, es funktioniert aber immer nur ein Teil davon.

Ich habe eine Produktdatenbank. Die Produkte haben Siegel- meistens nur eins, manchmal aber auch mehrere. Ich möchte nun die Siegel, die ich in der Produkt-Tabelle in mehreren Spalten stehen habe in der editierbaren Abfrage innerhalb einer Spalte zusammen (kommagetrennt) aufgelistet haben.
Also nicht | Produkt | Siegel 1 | Siegel 2 | Lieferant |
sondern | Produkt | Siegel 1, Siegel 2 | Lieferant |

Geschafft habe ich bisher per CONCAT, dass in einer Abfrage (Abfrage_Produkte_Preis) die Siegel wie gewünscht zusammen in einer Spalte angezeigt werden. Jedoch nur mit ihren IDs.
Dies habe ich auch in einem Unterformular in der editierbaren Abfrage (Formular "Produkte=Lieferanten=Favorit") integriert.
Ich schaffe es aber einfach nicht, dass diese Siegel-IDs dort in die Siegel-Bezeichnungen umgewandelt werden.

Die editierbare Abfrage nennt sich F3K_Abfrage_Produkte.

Datenbank hänge ich an.

Ich hoffe auf Hilfe- vielen Dank im Voraus!
Anoushka
Dateianhänge
Produkte_Lieferanten - Kopie.odb
(61.46 KiB) 553-mal heruntergeladen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Beitrag von RobertG »

Hallo Anoushka,

das, was Du vermutlich suchst, ist die korrelierende Unterabfrage. Dort bezieht sich eine Unterabfrage immer auf den aktuellen Datensatz. Und in so einer Unterabfrage kannst Du statt der Schlüssel natürlich auch die Bezeichnungen zusammenfassen. Im prinzip hast Du solche Unterabfragen schon in rauhen Mengen angewandt:

Code: Alles auswählen

 ( SELECT "Anmerkung" FROM "Lieferanten" WHERE "ID" = "Produkte"."LieferantID" )
Da bezieht sich die Unterabfrage auf den gerade aktuellen Wert, der in der äußeren Tabelle "Produkte" in dem Feld "LieferantenID" steht.

Noch ein Hinweis zu CONCAT: Das geht in der HSQLDB nur mit jeweils 2 Begriffen. Der einfacherer Weg ist

Code: Alles auswählen

"Feld1"||', '||"Feld2"||', '||"Feld3"
usw.

Gruß

Robert
Anoushka
**
Beiträge: 49
Registriert: Fr, 24.07.2020 15:59

Re: In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Beitrag von Anoushka »

Hallo Robert,

der Hinweis
"Feld1"||', '||"Feld2"||', '||"Feld3"
war der goldene Hinweis, danke!
Nach einigem Tüfteln funkioniert die editierbare Abfrage nun wie gewünscht- juhuu :-)

Allerdings... nur in der Datenbank-Kopie, die ich für solches Tüfteln & Ausprobieren angelegt hab.
Ich habe in dieser Kopie den größten Teil der Datensätze von den Tabellen Produkte, Lieferanten, Siegel-Tabelle gelöscht. Natürlich so, dass die Datensätze zusammen passen.

Den SQL-Befehl in der editierbaren Abfrage hab ich aus der Datenbank-Kopie in die editierbare Abfrage der Haupt-Datenbank reinkopiert. Doch dort funktioniert der Befehl nicht: Die Siegel-Spalte bleibt komplett leer.

Es scheint an der Tabelle Produkte zu liegen.
(Ich hab alle Tabellen aus der Haupt-Datenbank in die Datenbank-Kopie rüberkopiert und namentlich angepasst. Es funktioniert wunderbar. Bis zu dem Punkt, wo ich dasselbe mit der Produkte-Tabelle mache. Ab dem Punkt bleibt die Siegel-Spalte in der editierbaren Abfrage leer.)
Ich habe die Produkte-Tabelle in den beiden Datenbanken miteinander verglichen im Bearbeitungsmodus, Zeile für Zeile, Eigenschaft für Eigenschaft. Es ist alles exakt gleich. Ich kann es mir nicht erklären...

Gibt es die Möglichkeit, die reinen Datensätze aus der Produkt-Tabelle der Haupt-Datenbank in die Produkt-Tabelle der Datenbank-Kopie zu übertragen- und wenn ja, wie? Also ohne den Tabellenaufbau und die Eigenschaften der Spalten?
Oder gibt es irgendeine andere Lösungsmöglichkeit?

(Bzgl. der Frage "die reinen Datensätze in die Tabelle zu übertragen": Ich habe das schon versucht über "Daten anhängen", er sagt mir aber immer "kein gültiger Tabellenname". Ich habe sowohl Datenbankname.Tabellenname als auch Tabellenname.Datenbankname versucht, wie auch mit Leerzeichen vor/nach & vor+nach dem Punkt und alles das auch mit Komma.
Ausserdem hab ich versucht, die Produkt-Tabelle nach Calc zu importieren (Kopieren & Einfügen), das hat geklappt nach ewigem Warten- sind halt enorm viele Datensätze. Aber wie übertrage ich die jetzt in die funktionierende Datenbank-Tabelle? Ich habe von dieser Datenbanktabelle nun auch noch Kopie gemacht und daraus alle Datensätze gelöscht.)

Ratlos... Hilfe??

EDIT: Und jetzt krieg ich grad endgültig ne Macke... sorry... Plötzlich sind einige Felder im Produkt-Formular ausgegraut- ich kann noch sehen, was drin ist, diese aber nicht mehr bearbeiten. Verdammte sch... Jetzt geh ich erstmal schlafen...
Anoushka
**
Beiträge: 49
Registriert: Fr, 24.07.2020 15:59

Re: In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Beitrag von Anoushka »

Moin moin Robert,

wundersamer Weise.... habe in der Haupt-Datenbank nochmal das gleiche gemacht wie gestern (was gestern nur in der Datenbank-Kopie funktioniert hatte). Und heute funktioniert es... Also, dass die eingetragenen Siegel aus 2 Spalten zusammen kommagetrennt in einer extra Spalte namentlich (also nicht deren ID) angezeigt werden.
Fantastisch :-)

Jetzt ist nur noch das Problem, wenn nur in einer der beiden Spalten ein Siegel eingetragen ist, dann bleibt die Spalte die beide Siegel gemeinsam anzeigt, leer.
Vermutlich muss dann irgendwas zusätzlich in den SQL-Befehl eingetragen werden- konnte aber nicht finden, was genau.
Im Moment lautet der Teil des Befehls:

Code: Alles auswählen

( SELECT "Siegel" FROM "Siegel-Tabelle" WHERE "ID" = "Produkte"."SiegelID" ) || ', ' || ( SELECT "Siegel" FROM "Siegel-Tabelle" WHERE "ID" = "Produkte"."SiegelID1" ) AS "SiegelY"
Kannst Du / Könnt Ihr mir sagen, was ich da zusätzlich reinschreiben muss?

Viele Grüße, Anoushka
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Beitrag von RobertG »

Hallo Anoushka,

wenn Du Werte hast, die manchmal auch leer sein können, dann bleibt die Verbindung auch leer.

Code: Alles auswählen

COALESCE(( SELECT "Siegel" FROM "Siegel-Tabelle" WHERE "ID" = "Produkte"."SiegelID" ),' - ') ||
COALESCE( ', ' || ( SELECT "Siegel" FROM "Siegel-Tabelle" WHERE "ID" = "Produkte"."SiegelID1" ),'') AS "SiegelY"
Das macht, wenn das erste Siegel leer ist, einen Bindestrich dort hin. Wenn das 2. Siegel leer ist, dann wird auch das Komma nicht angezeigt und stattdessen ein leerer String weiter gegeben.

Der Befehl COALESCE ist universell für die HSQLDB und für Firebird nutzbar. Ansonsten gibt es für die HSQLDB noch IFNULL. Da kannst Du aber nur eine Bedingung abfragen. Die Syntax ist dort gleich.

Gruß

Robert
Anoushka
**
Beiträge: 49
Registriert: Fr, 24.07.2020 15:59

Re: In editierbarer Abfrage 2 Spalten aus Tabelle in einer Spalte verbinden

Beitrag von Anoushka »

Yupp, so ist jetzt alles bestens :-)
Vielen lieben Dank!!
Antworten