Row concatenation with FOR XML, but with multiple columns?

前端 未结 3 2017
轻奢々
轻奢々 2020-12-31 20:20

I often use queries like:

SELECT *
FROM   ThisTable
       OUTER APPLY (SELECT (SELECT SomeField + \' \' AS [data()]
                            FROM   SomeT         


        
3条回答
  •  遥遥无期
    2020-12-31 21:04

    You could do something like this. Instead of immediately sending the XML value to a string, this query uses the TYPE keyword to return an xml type object which can then be queried. The three query functions search the xml object for all instances of the Somefield element and return a new xml object containing just those values. Then the value function strips out the xml tags surrounding the values and passes them into a 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]
    

提交回复
热议问题