Zusammenfassen mehrerer Datensätze mit gleicher ID in ein Feld verketten

Hallo Gemeinde,

Ich muss für meinen Arbeitgeber eine Tabelle consolidieren um diese an ein Internetportal zu exportieren. Leider komme ich bei ein paar Feldern nicht weiter und hoffe mir kann jemand helfen.

Ausgangssituation:
(1 Tabelle mit 3 Spalten)
ID NAME VALUE
1 Colour green
1 Material paper
1 Vendor ZZZ
2 Colour red

Das ganze soll so aussehen:
ID ATTRIBUTES
1 Colour|green;Material|paper;Vendor|ZZZ
2 Colour|red

Ich muss es nun schaffen genau dies in ein SQL Statement zu bringen. Hier geht es natürlich um mehr als nur 4 Datensätze :wink:

Wer kann mir helfen?
Vielen Dank und Gruß
Michael

Hallo Michael,

du musst die Spalten mit der CONCAT Funktion zu einer einzigen Pseudo-Spalte zusammenfassen. „Pseudo“, weil diese Spalte nicht in der DB existiert, sondern nur in deinem Abfrage-Ergebnis. Daher musst du dieser Pseudo-Spalte dann noch den gewünschten Namen geben.

SELECT
 ID,
 CONCAT(
 'Colour|', Colour, ';',
 'Material|', Material, ';',
 'Vendor|', Vendor
 ) AS `ATTRIBUTES`
FROM {DEINE\_TABELLE}
WHERE {DEINE\_BEDINGUNGEN}

Der CONCAT Funktion gibt man beliebig viele Argumente - alles Zeichenketten, die aneinandergeklebt werden. Alles in den einfachen Gänsefüßchen sind explizite Strings, die du selbst definierst (inkl. deiner Trennzeichen | und :wink:. Colour, Material, Vendor ohne Gänsefüßchen sind die Werte aus den entsprechenden Tabellenfeldern.

Gruß
Thomas

ps: wenn hilfreich: ich freue mich über Bewertungspunkte. :smile:

Hallo smailbox,

würde es mal mit der concat-Funktion probieren (siehe http://technet.microsoft.com/de-de/library/hh231515… )

schönen Gruß
Stefan

Hallo,
vielleicht so in der Art:

SELECT ‚colour|‘ || tabelle1.colour, ‚material|‘ || tabelle1.material,
‚vendor|‘ || tabelle1.vendor
FROM tabelle1
INSERT INTO tabelle2

Anstelle „||“ muss man in manchen SQL-Dialekten auch die CONCAT()-Funtion verwenden.

Gruß
Erhard

Hallo Zusammen,

vielen Dank für eure guten Antworten. Leider funktioniert das in meinem Fall nicht. Ich habe ein wichtiges Detail vergessen:
Den Inhalt der Spalte „NAME“ ist Variabel. In meinem Fall stehen da im Moment 1000 verschieden Werte. Was bedeutet die CONCAT müsste sich dynamisch aufbauen ?!? o_O

Danke für Eure Unterstützung

Gruß
Michael

Oh, verstehe Dein Dilemma - allerdings wird es wohl mit einem einzelnen Statement nichts werden: das Datenbankdesign gibt es nicht her, es ist nicht optimal.

Muss es unbeding ein einziges Staement sein? Ansonsten würde ich es so angehen:

SELECT id, ‚Colour|‘ || value attribute FROM tabelle1 WHERE name = ‚Colour‘ INTO TEMP tab_c;
SELECT id, ‚Material|‘ || value attribute FROM tabelle1 WHERE name = ‚Material‘ INTO TEMP tab_m;
SELECT id, ‚Vendor|‘ || value attribute FROM tabelle1 WHERE name = ‚Vendor‘ INTO TEMP tab_v;
SELECT tab_c.id,
zab_c.attribute || ‚;‘ ||
tab_m.attribute || ‚;‘ ||
tab_v.attribute
FROM tab_c, tab_m, tab_v
WHERE tab_c.id = tab_m.id AND tab_c.id = tab_v.id;
INTO tabelle2;

Und bist Du sicher, dass die Zieldatei den genannten Aufbau mit zusammengesetzten Attributen so sinnvoll ist?

Gruß
Erhard