Объединяйте персонажей, используя SET BASED APPROACH (Sql Server 2005) - PullRequest
0 голосов
/ 03 октября 2009

У меня есть таблица, где данные похожи на

Data

 a
 b
 c

Мне нужно написать SQL-запрос, чтобы получить следующий вывод

Data

abc

Примечание: ~ Количество символов не ограничено 3.

Я решил использовать цикл while. Но я должен сделать это, используя подход, основанный на множестве. Так как я могу

присоединиться к этим персонажам? Я пытался использовать COALESCE, но не повезло

Пожалуйста, помогите мне

Edit:

Я не могу использовать любую функцию или CLR. Он должен быть целиком в 1 SQL.

FOR XML PATH - хороший выбор, но он показывает некоторую ссылку. На самом деле, я никогда этим не пользовался, поэтому я так прокомментировал.

Как преодолеть текст ссылки при использовании FOR XML PATH. и как это работает?

Есть ли другой способ, кроме FOR XML PATH?

Спасибо

Ответы [ 2 ]

2 голосов
/ 03 октября 2009

Просто нужно правильно указать бит XML PATH ...

CREATE TABLE #foo (bar char(1))

INSERT #foo SELECT 'a' UNION ALL SELECT 'b' UNION ALL SELECT 'c'
GO

SELECT
    buzz
FROM
    (
    SELECT 
        CAST(bar AS varchar(8000))
    FROM 
        #foo
    FOR XML PATH ('')
    ) fizz(buzz)

DROP TABLE #foo
2 голосов
/ 03 октября 2009

Что вам действительно нужно, так это агрегат конкатенации строк. Как бы ни была популярна эта идея, я не уверен, почему Microsoft до сих пор не реализовала ее на этом языке. Однако можно использовать интеграцию CLR в SQL Server 2005 и более поздних версиях, чтобы создать собственный настраиваемый агрегат, который будет делать именно это. Тогда вы сможете сделать что-то вроде ...

select
    concat(your_column)

from your_table

Если вы собираетесь использовать это много или вам потребуется более детальный контроль (например, возможность указать разделитель и т. Д.), Тогда подход CLR стоит усилий. Если все, что вам нужно, это просто прямая конкатенация, то трюк for path, вероятно, проще.

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