Hi
In einer Tabelle stehen zu einem Schlüssel folgende Werte:
Key Seq Wert
B 1 G
B 2 H
B 3 A
D 1 V
D 2 E
Als Ausgabe möchte ich über eine SQL-Abfrage als Ergebnis die
Werte zu einem Schlüssel hintereinander stehen haben (also
keine 3 bzw. 2 Datensätze untereinander). Das Ergebnis soll so
aussehen (Komma muss nicht sein, kann auch Leerzeichen sein):
B G, H, A
D V, E
SQL arbeitet zeilen-orientiert und stellt daher keine „built-in“-Funktion für das bereit, was Du möchtest.
Entweder Du verlagerst die Aufreihung in die Anwendung oder Du arbeitest mit Cursorn (in einer Funktion z.B.):
FUNCTION ... RETURNS TABLE
@RETURN\_TABLE (
KEY CHAR(1),
WERT VARCHAR(128) )
AS
BEGIN
DECLARE @CUR\_KEY CHAR(1);
DECLARE @CUR\_VAL CHAR(1);
DECLARE @SUM\_VAL VARCHAR(128);
DECLARE KEY\_CURSOR CURSOR
FOR
SELECT DISTINCT Key FROM Tabelle
OPEN KEY\_CURSOR
FETCH NEXT FROM KEY\_CURSOR INTO @CUR\_KEY
WHILE(@@FETCH\_STATUS=0)
BEGIN
SET @SUM\_VAL = ''
DECLARE VAL\_CURSOR CURSOR FOR
SELECT Wert FROM Tabelle WHERE Key = @CUR\_KEY
OPEN VAL\_CURSOR
FETCH NEXT FROM VAL\_CURSOR INTO @CUR\_VAL
WHILE(@@FETCH\_STATUS=0)
BEGIN
SET @SUM\_VAL = @SUM\_VAL + @CUR\_VAL + ' '
FETCH NEXT FROM VAL\_CURSOR INTO @CUR\_VAL
END
CLOSE VAL\_CURSOR
DEALLOCATE VAL\_CURSOR
INSERT INTO @RETURN\_TABLE
( KEY, WERT )
VALUES
( @CUR\_KEY, @SUM\_VAL )
FETCH NEXT FROM KEY\_CURSOR INTO @CUR\_KEY
END
CLOSE KEY\_CURSOR
DEALLOCATE KEY\_CURSOR
RETURN @RETURN\_TABLE;
END
Aber in der Anwendung wäre es gewiss performanter 
Grüße
m4tt3n