Существует ли реализация функции STRAGG Тома Кайта, поддерживающей SQL Server? - PullRequest
4 голосов
/ 10 августа 2009

Реализация функции STRAGG возвращает результат в виде значения одного столбца. Реализация для Oracle кажется довольно общей и может использоваться для разных таблиц (и отношений). Может ли подобное поведение быть достигнуто для SQL Server. Похоже, что поиск в Интернете возвращает только жестко запрограммированные реализации, а не общие. У нас есть какое-нибудь известное решение для сервера Sql?

Ответы [ 2 ]

6 голосов
/ 10 августа 2009

Существует хорошее решение XML, которое широко используется. Проще всего, если объединяемые строки не содержат XML-недопустимых или XML-специальных строк, и вот пример.

SELECT *
FROM
(
   SELECT x AS [data()]
   FROM
      (
         SELECT 'something'
         UNION ALL
         SELECT 'something else'
         UNION ALL
         SELECT 'something & something'
      ) y (x)
   FOR XML PATH('')
) z (final)

Этот пример взят из сообщения Тони Роджерсона в http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/07/06/871.aspx

Вы можете сделать гораздо больше, чем показывает этот простой пример. Вы можете указать порядок элементов в агрегатах (поместите ORDER BY в производную таблицу), вы можете сгруппировать и объединить, чтобы получить более одной строки результатов, вы можете изменить разделители и так далее. Вот еще несколько ссылок на эту технику:

http://blogs.technet.com/wardpond/archive/2008/03/15/database-programming-the-string-concatenation-xml-trick-revisited-or-adam-is-right-but-we-can-fix-it.aspx

http://web.archive.org/web/20150328021904/http://sqlblog.com/blogs/adam_machanic/archive/2009/05/31/grouped-string-concatenation-the-winner-is.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...