Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Конкатенация на редове с FOR XML, но с множество колони?

Можеш да направиш нещо подобно. Вместо незабавно изпращане на XML стойността към низ, тази заявка използва ключовата дума TYPE, за да върне обект от xml тип, който след това може да бъде заявен. Трите функции за заявка търсят в xml обекта всички екземпляри на елемента Somefield и връщат нов xml обект, съдържащ само тези стойности. След това функцията стойност премахва xml таговете около стойностите и ги предава във 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]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. За транзакция без запис, която е по-евтина/по-бърза:COMMIT или ROLLBACK?

  2. Как правите пълнотекстово търсене (FTS) с Linq to ADO.NET entity framework?

  3. Ограничение за регулярен израз на SQL Server

  4. Условни условия в SQL Server

  5. Кои са по-ефективни, CTE или временни таблици?