Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Funktion erstellen, die Texte verbindet

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von jenpet, 13 März 2015.

  1. jenpet

    jenpet Neuer Benutzer

    Hallo,

    ich habe gerade ein Problem mit einer Funktion die ich erstellen möchte und komme da einfach nicht weiter.

    Ich habe eine Tabelle mit Berichten und die Berichte haben auch IDs (ToDoID).

    Ich wollte mit einer Funktion die Berichte zusammenfassen, die die gleiche ID haben.

    Also wenn es in der Tabelle 2 Berichte gibt die die ID 29 haben, sollen diese Berichte zusammengeschrieben werden.
    Als wenn ich 2 Strings zusammenfüge mit einem Leerzeichen oder einem Zeilenumbruch dazwischen. (strText1 = strText1 + " " + strText2).
    Das blöde ist, dass die Berichte vom Typ Text sind und ich in der Funktion nicht Text returnen kann.

    Ich habe schon versucht die Texte zu summieren oder mit CAST den Text in Varchar zu wandeln.

    Ich habe das so probiert, aber das funktioniert nicht.

    Create FUNCTION [dbo].[getDescription](@ToDo Integer)
    Returns Varchar(Max)
    AS
    BEGIN
    IF (Select Count(*) From Arbeitsbericht where ToDoID = @ToDo) > 0
    BEGIN
    Return(SELECT SUM(Beschreibung ) From Arbeitsbericht )
    END
    Return (Select Beschreibung) From Arbeitsbericht)
    END

    Bestimmt gibt es eine ganz einfache Art, wie man das lösen kann, aber ich komm gerade einfach nicht weiter.

    Vielen Dank im Voraus für die Antworten!
     
  2. Distrilec

    Distrilec Datenbank-Guru

    Um über Zeilen hinweg zu konkatenieren braucht man doch eine Aggregation oder kann MSSQL da unterscheiden?...
     
  3. akretschmer

    akretschmer Datenbank-Guru

    ACK. In PostgreSQL array_agg() und daraus einen Text, in MySQL group_concat(). M$SQL? Gibt es sicher auch was vom Bill ;-)
     
  4. ukulele

    ukulele Datenbank-Guru

    jenpet gefällt das.
  5. jenpet

    jenpet Neuer Benutzer

    Danke für den Link!
    Werde ich heute mal testen.
     
  6. jenpet

    jenpet Neuer Benutzer

    Ok es klappt jetzt mit diesem Code kriege ich genau das, was ich haben wollte

    ALTER FUNCTION [dbo].[getDescription](@ToDo Integer)
    Returns Varchar(Max)
    AS
    BEGIN
    Return (SELECT Top(1) STUFF(
    (SELECT ',' + Convert(varchar(max),s.Beschreibung)
    FROM Arbeitsbericht s
    WHERE s.ToDoID = @ToDo
    FOR XML PATH('')),1,1,'') AS Beschreibung
    FROM Arbeitsbericht AS t
    GROUP BY t.ToDoID)
    END

    Danke nochmal für die Links und Schlüsselwörter!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden