Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Concatenazione di righe con FOR XML, ma con più colonne?

Potresti fare qualcosa del genere. Invece di inviare immediatamente il valore XML a una stringa, questa query utilizza la parola chiave TYPE per restituire un oggetto di tipo xml che può quindi essere interrogato. Le tre funzioni di query cercano nell'oggetto xml tutte le istanze dell'elemento Somefield e restituiscono un nuovo oggetto xml contenente solo quei valori. Quindi la funzione value rimuove i tag xml che circondano i valori e li passa in 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]