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
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
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.