Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zeilenverkettung mit FOR XML, aber mit mehreren Spalten?

Sie könnten so etwas tun. Anstatt den XML-Wert sofort an eine Zeichenfolge zu senden, verwendet diese Abfrage das Schlüsselwort TYPE, um ein Objekt vom Typ xml zurückzugeben, das dann abgefragt werden kann. Die drei Abfragefunktionen durchsuchen das XML-Objekt nach allen Instanzen des Somefield-Elements und geben ein neues XML-Objekt zurück, das nur diese Werte enthält. Dann entfernt die Wertfunktion die XML-Tags, die die Werte umgeben, und übergibt sie an ein varchar(max)

SELECT  ThisTable.ID
       ,[A].query('/Somefield').value('/', 'varchar(max)') AS [SomeField_Combined]
       ,[A].query('/Somefield2').value('/', 'varchar(max)') AS [SomeField2_Combined]
       ,[A].query('/Somefield3').value('/', 'varchar(max)') AS [SomeField3_Combined]
FROM    ThisTable
        OUTER APPLY (
                     SELECT (
                             SELECT SomeField + ' ' AS [SomeField]
                                   ,SomeField2 + ' ' AS [SomeField2]
                                   ,SomeField3 + ' ' AS [SomeField3]
                             FROM   SomeTable
                             WHERE  SomeTable.ID = ThisTable.ID
                            FOR
                             XML PATH('')
                                ,TYPE
                            ) AS [A]
                    ) [A]