Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Concatenação de linhas com FOR XML, mas com várias colunas?


Você poderia fazer algo assim. Em vez de enviar imediatamente o valor XML para uma string, essa consulta usa a palavra-chave TYPE para retornar um objeto do tipo xml que pode ser consultado. As três funções de consulta pesquisam no objeto xml todas as instâncias do elemento Somefield e retornam um novo objeto xml contendo apenas esses valores. Em seguida, a função value remove as tags xml que cercam os valores e as passa para um 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]