Mehrere Einträge zusammen ausgeben

Hubert7

Neuer Benutzer
Beiträge
3
Hallo und danke schon mal im Voraus für die Hilfe. Ich habe folgende Problemstellung:
Pro User soll nur ein Tagesbericht bestehen. Ich habe eine Abfrage geschrieben, die mehrfach angelegte Berichte findet. Nun würde ich mir gerne die Ids dieser Tagesberichte anzeigen lassen. Ich habe es bereits mit verschiedenen Formen versucht, komme aber nicht weiter. Hier das aktuelle Statement:
SQL:
SELECT Convert(DATE, Tagesberichte.Datum_von, 23) AS Datum
    ,Tagesberichte.Client_Insert_User_Id AS 'User_Id'
    ,count(Tagesberichte.Datum_von) AS Anzahl_Tagesberichte
    ,count(Besuchsberichte.Datum_von) AS Anzahl_Besuchsberichte
FROM Tagesberichte
LEFT JOIN Besuchsberichte ON Tagesberichte.Id = [dbo].[Besuchsberichte].Tag_Id
GROUP BY Convert(DATE, Tagesberichte.Datum_von, 23)
    ,Tagesberichte.Client_Insert_User_Id
HAVING COUNT([Tagesberichte].Datum_von) > 1

Wo könnte ich ansetzen?
Edit: Ich habe es bisher nur geschafft eine der Ids auszugeben, indem ich im select und im group by die Id mit eingeschlossen habe. Benötigt werden aber alle Ids
 
Werbung:
Falls ich Dich richtig verstehe, suchst Du eine Aggregation dieser IDs, also etwas was ich in PostgreSQL mittels array_agg() z.B. machen würde.
 
Genau, irgendwie müsste ich in Fällen, wo für einen Tag zwei Berichte vorliegen, beide Ids aggregiert ausgeben Es gibt zwar in T-SQL STRING_AGG, allerdings erst ab MSSQL 2017. Wir haben verschiedene Server bis MSSQL 2016 im Einsatz.
 
Zuletzt bearbeitet:
Werbung:
Ich habe es geschafft. Die Lösung war folgendes im Select hinzuzufügen:
SQL:
,TagesIDs = STUFF(
             (SELECT ',' + CONVERT(varchar(254), Id)
              FROM Tagesberichte t1
              WHERE t1.Client_Insert_User_Id = Tagesberichte.Client_Insert_User_Id AND Convert(DATE, t1.Datum_von, 23) = Convert(DATE, Tagesberichte.Datum_von, 23)
              FOR XML PATH (''))
             , 1, 1, '')
 
Zurück
Oben