sql >> Base de Datos >  >> RDS >> Sqlserver

¿Concatenación de filas con FOR XML, pero con varias columnas?

Podrías hacer algo como esto. En lugar de enviar inmediatamente el valor XML a una cadena, esta consulta usa la palabra clave TYPE para devolver un objeto de tipo xml que luego se puede consultar. Las tres funciones de consulta buscan en el objeto xml todas las instancias del elemento Somefield y devuelven un nuevo objeto xml que contiene solo esos valores. Luego, la función de valor elimina las etiquetas xml que rodean los valores y las pasa a 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]