# Verkettung von Spalteninhalten aus mehreren Zeilen



## Sergeant_Pepper (18. Dez 2008)

Hallo,

mal eine Frage unabhängig von Java.

Gegeben sei folgende Tabelle:

```
Name          Text
------        ---------
k1            aaa
k1            bbb
k2            willi
k2            peter
```

Ich möchte folgendes Resultset haben:

```
Name          aufbereitet
------        ---------
k1            aaa, bbb
k2            willi, peter
```

Geht so etwas mit Oracle-SQL, oder muss ich die Strings nach Ausführung einer Abfrage durch Java-Code verketten?


----------



## HoaX (18. Dez 2008)

geht bestimmt, schau in der doku mal nach group by und concat


----------



## Sergeant_Pepper (19. Dez 2008)

HoaX hat gesagt.:
			
		

> geht bestimmt, schau in der doku mal nach group by und concat


Hallo Hoax,
in dieser Richtung habe ich schon was probiert, aber leider ist concat keine Gruppenfunktion.
Trotzdem ein "Danke" für den Tip.


----------



## maki (19. Dez 2008)

http://www.java2s.com/Code/Oracle/Char-Functions/StringStringconcatenatestwostrings.htm

Oder habe ich dich missverstanden?


----------



## SlaterB (19. Dez 2008)

aber ein Group By ist schon was anderes als direkte Verknüpfung,

es müsste
select concat(x) from y group by z 
sein, analog zu
select sum(g) from y group by z 

ob das geht steht in den Sternen bzw ist hier die Frage


----------



## maki (19. Dez 2008)

Achso...
Danke SlaterB


----------



## Ebenius (19. Dez 2008)

Mit SQL wird's wahrscheinlich nichts. Wenn Du PL/SQL nutzen kannst, hilft Dir evtl. dieser Artikel


----------



## Ebenius (19. Dez 2008)

Hier noch mehr. Besonders der Ansatz per Hierarchie ist einen Blick wert!

Damit ist meine obige Aussage, dass es ohne PL/SQL wohl nix wird, nichtig.

Ebenius


----------



## Sergeant_Pepper (19. Dez 2008)

SlaterB hat gesagt.:
			
		

> es müsste
> select concat(x) from y group by z
> sein, analog zu
> select sum(g) from y group by z
> ...


Hallo SlaterB,
das habe ich probiert --> geht leider nicht... :cry: 
In den Sternen habe ich allerdings noch nicht nachgesehen  :### ... welche Google-Option ist das?


----------



## Sergeant_Pepper (19. Dez 2008)

Hallo Ebenius,
habe dich eben erst gelesen... vielen Dank, muss ich mal probieren... nach Weihnachten


----------



## voidee (24. Dez 2008)

wenn für jeden Namen immer nur 2 Text Einträge bestehen müsste es auch mit einem Full-Join gehen:

Zunächst das innere Select-Statement

```
SELECT 
  t1.NAME T1_NAME
, t1.TEXT T1_TEXT
, t2.NAME T2_NAME
, t2.TEXT T2_TEXT
FROM 
  table t1
, table t2
WHERE t1.NAME = t2.NAME
```

auf dieses innere Select (gib ihm den Namen _inner_ ein äußeres Select anwenden


```
SELECT
  inner.T1_NAME NAME
, inner.T1_TEXT || ' ' || inner.T2_TEXT TEXT
FROM 
(....
) inner
WHERE 1=1
AND T1_NAME = T2_NAME
AND T1_TEXT != T2_TEXT
```

Ist natürlich ein bisschen Buggy, da keine _null_s beachtet werden. Aussderdem habe ich gerade keine DB zur Verfügung, um das zu prüfen. Wenn es mehr als 2 Texte je Name gibt, dann hilft wphl nur eine PL/SQL Funktion 

Gruß
Tom


----------

