Benutzer mit den meisten Antworten
Kombi Aufträge einer Spalte zusammen fassen

Frage
-
Sehr geehrte Forumsmitglieder/innen,
ich stehe vor einem Problem, wo ich nicht genau weiß, ob ich das nur mit einem dynamischen Pivot lösen kann oder ob es eventuell dafür sogar noch eine einfache Variante gibt?
Ich habe mal eine Beispiel Tabelle erstellt, mit dem Ergebnis wie es am Ende aussehen sollte.
WITH [temp_table_example] ([Maschine],[Auftrag],[Artikel],[Kombiauftrags-Nr],[Kombiauftrags-Pos]) AS ( SELECT 'Maschine 1', '11111111', '123456',NULL,'1' UNION ALL SELECT 'Maschine 2', '11112121', '123547','202020','1' UNION ALL SELECT 'Maschine 2', '51112121', '123557','202020','2' UNION ALL SELECT 'Maschine 3', '13121212', '129997',NULL,'1' UNION ALL SELECT 'Maschine 4', '13136146', '999969','201212','1' UNION ALL SELECT 'Maschine 4', '513136147', '999979','201212','2' UNION ALL SELECT 'Maschine 4', '513136148', '999989','201212','3' UNION ALL SELECT 'Maschine 4', '513136149', '999999','201212','4' ), [desired_result] ([Maschine],[Auftrag],[Artikel]) AS ( SELECT 'Maschine 1', '11111111', '123456' UNION ALL SELECT 'Maschine 2', '11112121', '123547,123557' UNION ALL SELECT 'Maschine 3', '13121212', '129997' UNION ALL SELECT 'Maschine 4', '13136146', '999969,999979,999989,999999' ) SELECT * FROM [temp_table_example]
Kann man das auch ohne Pivot lösen? Wenn ja, wäre ich für jegliche Denkanstöße sehr dankbar.
Vielen Dank im Voraus.
Gruß
dash_
Antworten
-
Hi,
ab SQL Server 2017 kannst Du dafür STRING_AGG verwenden.
SELECT Maschine, MAX( Auftrag ) AS Auftrag, STRING_AGG( Artikel, ', ' ) AS Artikelnummern FROM temp_table_example GROUP BY Maschine
Für frühere SQL Server Versionen schau dir bitte diesen SO Thread an:
How to concatenate text from multiple rows into a single text string in SQL server?
Dort sind wohl so ziemlich alle Varianten zur Zusammenfassung von Zeilenwerten in Textfelder aufgeführt, die es gibt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Donnerstag, 23. Juli 2020 07:05
- Als Antwort vorgeschlagen Christoph MuthmannEditor Donnerstag, 23. Juli 2020 12:02
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 20. November 2020 13:12
-
Hallo Stefan,
vielen Dank für deine schnelle Antwort. Es ist leider kein SQL 2017 oder höher im Einsatz. Aber dank deines Links konnte ich es für mich wie folgt lösen:
WITH [temp_table_example] ([Maschine],[Auftrag],[Artikel],[Kombiauftrags-Nr],[Kombiauftrags-Pos]) AS ( SELECT 'Maschine 1', '11111111', '123456',NULL,'1' UNION ALL SELECT 'Maschine 2', '11112121', '123547','202020','1' UNION ALL SELECT 'Maschine 2', '51112121', '123557','202020','2' UNION ALL SELECT 'Maschine 3', '13121212', '129997',NULL,'1' UNION ALL SELECT 'Maschine 4', '13136146', '999969','201212','1' UNION ALL SELECT 'Maschine 4', '513136147', '999979','201212','2' UNION ALL SELECT 'Maschine 4', '513136148', '999989','201212','3' UNION ALL SELECT 'Maschine 4', '513136149', '999999','201212','4' ) SELECT [t1].[Maschine] AS 'Maschine', STUFF((SELECT ', ' + [temp_table_example].[Artikel] FROM [temp_table_example] WHERE [temp_table_example].[Maschine] = [t1].[Maschine] FOR XML PATH('')),1,1,'') AS 'Artikel' FROM (SELECT DISTINCT Maschine from [temp_table_example]) [t1]
Mal wieder neues dazu gelernt, vielen Dank!
Gruß dash_
- Als Antwort vorgeschlagen Christoph MuthmannEditor Donnerstag, 23. Juli 2020 12:02
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 20. November 2020 13:12
Alle Antworten
-
Hi,
ab SQL Server 2017 kannst Du dafür STRING_AGG verwenden.
SELECT Maschine, MAX( Auftrag ) AS Auftrag, STRING_AGG( Artikel, ', ' ) AS Artikelnummern FROM temp_table_example GROUP BY Maschine
Für frühere SQL Server Versionen schau dir bitte diesen SO Thread an:
How to concatenate text from multiple rows into a single text string in SQL server?
Dort sind wohl so ziemlich alle Varianten zur Zusammenfassung von Zeilenwerten in Textfelder aufgeführt, die es gibt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Donnerstag, 23. Juli 2020 07:05
- Als Antwort vorgeschlagen Christoph MuthmannEditor Donnerstag, 23. Juli 2020 12:02
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 20. November 2020 13:12
-
Hallo Stefan,
vielen Dank für deine schnelle Antwort. Es ist leider kein SQL 2017 oder höher im Einsatz. Aber dank deines Links konnte ich es für mich wie folgt lösen:
WITH [temp_table_example] ([Maschine],[Auftrag],[Artikel],[Kombiauftrags-Nr],[Kombiauftrags-Pos]) AS ( SELECT 'Maschine 1', '11111111', '123456',NULL,'1' UNION ALL SELECT 'Maschine 2', '11112121', '123547','202020','1' UNION ALL SELECT 'Maschine 2', '51112121', '123557','202020','2' UNION ALL SELECT 'Maschine 3', '13121212', '129997',NULL,'1' UNION ALL SELECT 'Maschine 4', '13136146', '999969','201212','1' UNION ALL SELECT 'Maschine 4', '513136147', '999979','201212','2' UNION ALL SELECT 'Maschine 4', '513136148', '999989','201212','3' UNION ALL SELECT 'Maschine 4', '513136149', '999999','201212','4' ) SELECT [t1].[Maschine] AS 'Maschine', STUFF((SELECT ', ' + [temp_table_example].[Artikel] FROM [temp_table_example] WHERE [temp_table_example].[Maschine] = [t1].[Maschine] FOR XML PATH('')),1,1,'') AS 'Artikel' FROM (SELECT DISTINCT Maschine from [temp_table_example]) [t1]
Mal wieder neues dazu gelernt, vielen Dank!
Gruß dash_
- Als Antwort vorgeschlagen Christoph MuthmannEditor Donnerstag, 23. Juli 2020 12:02
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 20. November 2020 13:12