Sequentielle Listenausgabe

Hallo zusammen,
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

Wer kann mir weiterhelfen.
Danke im voraus.

Gruß Didi

Hallo,

Welche DB benutzt du ?

Gruss

Sorry, hab ich vergessen. Ich arbeite mit SQL-Server 2000.

Gruß Didi

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 :smile:

Grüße
m4tt3n

Hi m4tt3n,
ich habe mit Funktionen noch nicht gearbeitet. Wenn ich sie so, wie Du sie eingestellt hast, starte, bekomme ich folgende Fehlermeldungen:
Server: Nachr.-Nr. 156, Schweregrad 15, Status 1, Zeile 4
Falsche Syntax in der Nähe des FUNCTION-Schlüsselwortes.
Server: Nachr.-Nr. 137, Schweregrad 15, Status 1, Zeile 40
Die Variable ‚@RETURN_TABLE‘ muss deklariert werden.
Server: Nachr.-Nr. 137, Schweregrad 15, Status 1, Zeile 50
Die Variable ‚@RETURN_TABLE‘ muss deklariert werden.
Das Ergebnis dient mir nur für eine Excelliste, es wird in keiner weiteren Anwendung bearbeitet.

Gruß Didi

Hi Didi,

da hab ich mich beim Funktionskopf verhaspelt…

CREATE FUNCTION name ()
RETURNS @RETURN\_TABLE TABLE (
 KEY CHAR(1),
 WERT VARCHAR(128) )
AS
BEGIN
...
END

Grüße
m4tt3n