2012-06-03 5 views
5

Можно создать дубликат:
Concatenate many rows into a single text string?Выберите несколько строк SQL в одну строку

Предположим, у меня есть таблица с именем tblContractMail. Пример таблицы с данными, приведены ниже:

enter image description here

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

«[email protected]; [email protected]; ХИК @ akij.net»

Я знаю две возможности:

DECLARE @str varchar(4000) 
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail 
SELECT @str 

и:

DECLARE @str varchar(4000) 
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH('')) 
SET @str = SUBSTRING(@str, 1, LEN(@str)-1) 
SELECT @str 

Есть ли способ, чтобы получить этот вывод в одном запросе (я имею в виду из объявляя переменные)?

+0

См. Это. http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string –

+0

Да, этот вопрос был продублирован не раз. –

+0

@PeterMajeed: Правда, хотя в этой конкретной форме его никогда не спрашивали. –

ответ

5

Первый метод зависит от переменной, поэтому ответ нет для первого.

Но вы можете легко использовать второй подход, без переменной, только вам нужно изменить его немного:

SELECT 
    SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')), 
    2, 
    2147483647 
) 

Как вы можете видеть, сепаратор идет перед тем деталь. В результате вы начинаете вырезать строку со второго символа, опуская первую точку с запятой. Спецификатор длины не должен быть точно длиной минус один, вы можете указать любое довольно большое число, и функция вернет все от второго символа до конца. В этом случае указано значение int.

+0

Hi @Andriy thanks – yeasir007

Смежные вопросы