Einträge in Zeilen in einer Spalte zusammenfassen

Mr. Robot

Fleissiger Benutzer
Beiträge
88
Hallo zusammen,

ich habe über die Window Function PKs mit doppelten Segmenten ermittelt (siehe Spalte DIST_SEG). Nun möchte ich eine Spalte mit einer Zusammenfassung der Segmente:

Unbenannt.PNG

Ist das möglich?
 
Werbung:
nabnd.

Code:
test=*# select * from bla;
 pk | segment
----+---------
  1 | a
  1 | b
  1 | c
  2 | a
  2 | a
  2 | b
  2 | d
  3 | d
  3 | e
  4 | a
(10 rows)

test=*# with foo as (select distinct pk, segment from bla), foo2 as (select pk, string_agg(segment,'+') as segment from foo group by pk) select * from bla left join foo2 on (bla.pk)=(foo2.pk);
 pk | segment | pk | segment
----+---------+----+---------
  1 | a       |  1 | a+c+b
  1 | b       |  1 | a+c+b
  1 | c       |  1 | a+c+b
  2 | a       |  2 | a+d+b
  2 | a       |  2 | a+d+b
  2 | b       |  2 | a+d+b
  2 | d       |  2 | a+d+b
  3 | d       |  3 | d+e
  3 | e       |  3 | d+e
  4 | a       |  4 | a
(10 rows)
 
Die Funktion STRING_AGG wird bei mir irgendwie nicht erkannt:
STRING_AGG wird nicht als Name einer integrierten Funktion erkannt.

Gibt es vielleicht eine alternative? Zum Beispiel mit STUFF()?

Ich benutze Microsoft SQL 2018
 
Die Funktion STRING_AGG wird bei mir irgendwie nicht erkannt:
STRING_AGG wird nicht als Name einer integrierten Funktion erkannt.

Gibt es vielleicht eine alternative? Zum Beispiel mit STUFF()?

Ich benutze Microsoft SQL 2018

Kann es sein, dass bei deiner Datenbank der Kompatibilitätslevel < 140 eingestellt ist?
Dann "versteht" die Engine den Befehl auch nicht
 
Das passiert meistens dann wenn man ein Datenbankbackup von einem älteren Server auf einer neueren Version wiederherstellt.
Ohne dass du den Kompatibilitätslevel hochdrehst versteht die Datenbank nur die alten Befehle.
In vielen Fällen kann man das einfach hochstellen, allerdings musst du dir sicher sein dass keine alten Befehle mehr verwendet werden die im "Sprachschatz" dann nicht mehr zur Verfügung stehen. Sonst läufst du in Probleme.

Wobei mir von 130 auf 140 da auf die Schnelle kaum was einfallen würde.

ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL) - SQL Server
 
Was wären das für alte Befehle die ggf. nicht mehr zu Verfügung stehen und würde sich der Prozess wieder Rückgängig machen lassen?

Gibt es keine alternativen Befehle zum string_agg? :confused:
 
Hi Daniel. Wenn ich die Spalte SEGMENT pivotisiere habe ich Sie in den Spaltenüberschriften und kann Sie nicht mehr zusammenführen. Kannst du mehr Details dazu geben?
 
Mit concat kannst du mehrere Felder wieder zusammenziehen.
Code:
WITH x AS
(
    SELECT '1' AS nr, NULL AS nr2, '2' AS nr3, '4' AS nr4
)
SELECT *, LTRIM(CONCAT(' ' + nr, ' ' + nr2,' ' + nr3,' ' + nr4)) FROM X;

ist nicht besonders schön aber es funzt
 
Das geht auch alles viel einfacher (ohne Pivot, ohne Window Function):
tsql - Sql PIVOT and string concatenation aggregate - Stack Overflow

Für mein Fall vereinfacht (ohne Ressource Typ und ein distinct mehr):

SELECT distinct e.[Event Name],
LEFT(r.ResourceName , LEN(r.ResourceName)-1) ResourceName
FROM yourtable e
CROSS APPLY
(
SELECT distinct r.[Resource Name] + ', '
FROM yourtable r
where e.[Event Name] = r.[Event Name]
FOR XML PATH('')
) r (ResourceName)

Neben Segmenten habe ich noch ein Typ S, G welches mir dann ein G + S ausgibt. Sieht jemand eine Möglichkeit stattdessen ein S + G zu erhalten? Eine ORDER BY Funktion lässt sich leider schwer einbauen.
 
Werbung:
Zurück
Oben