SQL Verkettung, letztes Trennzeichen unterdrücken

h00bi

Fleet Admiral
Registriert
Aug. 2006
Beiträge
23.841
Hallo zusammen,

ich verkette in SQL mehrere Spalten zu einem komma(+ 1 Space) getrennten String.
StadtNameVorname
DuisburgMeyerDirk
DuisburgSchmidDaniel
DuisburgSchmidtJens
DuisburgKornMaria
FrankfurtKnieblerAnna
FrankfurtFlenAndreas
FrankfurtDerisAndrea
FrankfurtKoblerFlorian
FrankfurtMahlerAnna

Ich brauche für jede Stadt alle Namensteile in einem speziellen Schema:
ErsterName: ErsterVorname, ZweiterName: ZweiterVorname, Dritter...
Code:
Cast Name + ': ' + CAST Vorname + ', '
DuisburgMeyer: Dirk, Schmid: Daniel, Schmidt: Jens, Korn: Maria,

Mein Problem ist nun:
Wie unterdrücke ich das ', ' also Komma+Leerzeichen nach dem letzten Namen für eine Stadt, hier im Beispiel hinter Maria?
 
Zuletzt bearbeitet:
LEFT(DeinStatement,LEN(DeinStatement)-2)
 
Wenn du deinen Output mit Komma hast, dann einfach noch sowas in der Art abfragen:

select substring('test string', 1, (len('test string') - 1))
 
h00bi schrieb:
ich verkette in SQL mehrere Spalten zu einem komma(+ 1 Space) getrennten String.
Welche Datenbank genau bitte? Da gibts unterschiedliche Möglichkeiten.
 
Wie wäre es mit STRING_AGG?

SQL:
SELECT Stadt, STRING_AGG(CONCAT(Name, ': ', Vorname), ', ') FROM x GROUP BY Stadt

Bin nur am Handy, daher Kurzfassung :)
 
  • Gefällt mir
Reaktionen: Oelepoeto und Cheesy
Laut deinem Beispiel verkettest du nicht nur Spalten, sondern auch Zeilen.
Da wäre es dann ganz angebracht, dein Query zu zeigen...

Aber gut, im Prinzip macht man das so, musst du dann halt selbst für dich hinbasteln:

SQL:
SELECT
STUFF(
    (SELECT N', ' +
    rx.Stadt + '; ' + ISNULL(rx.Name, '') + ': ' + ISNULL(rx.Vorname, '')
    FROM dbo.table rx
    WHERE rx.Stadt = r.Stadt
    FOR XML PATH(''),TYPE)
    .value('text()[1]','nvarchar(max)'),1,2,N'')
    as [Namen]
FROM dbo.table r
GROUP BY r.Stadt
 
Zurück
Oben