Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Concaténation de lignes avec FOR XML, mais avec plusieurs colonnes ?

Vous pourriez faire quelque chose comme ça. Au lieu d'envoyer immédiatement la valeur XML à une chaîne, cette requête utilise le mot clé TYPE pour renvoyer un objet de type xml qui peut ensuite être interrogé. Les trois fonctions de requête recherchent dans l'objet xml toutes les instances de l'élément Somefield et renvoient un nouvel objet xml contenant uniquement ces valeurs. Ensuite, la fonction value supprime les balises xml entourant les valeurs et les passe dans un 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]