none
Kombi Aufträge einer Spalte zusammen fassen RRS feed

  • 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_

    Donnerstag, 23. Juli 2020 06:26

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



    Donnerstag, 23. Juli 2020 06:57
    Moderator
  • 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_

    Donnerstag, 23. Juli 2020 07:38

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



    Donnerstag, 23. Juli 2020 06:57
    Moderator
  • 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_

    Donnerstag, 23. Juli 2020 07:38