SQL, как объединить результаты?

В настоящее время у меня есть запрос SQL, который возвращает несколько полей. Мне нужно одно для полей, чтобы быть эффективно под-запрос к югу, что.

Проблема в деталях:

Если у меня есть таблица X с двумя столбцами, ModuleID и скажем ModuleValue, как мне написать SQL-запрос, чтобы взять результаты и объединить его в одно поле:

НАПРИМЕР Результаты возвращены из

 (SELECT ModuleValue FROM Table_X WHERE [email protected])

Значение 1

Значение 2

Значение 3

...

Мне нужно вернуть результат таким образом (в виде одной строки, в отличие от вышеупомянутого):

Значение 1, Значение 2, Значение 3

Есть ли простой метод конкатенации, который может быть пользователем?

РЕДАКТИРОВАТЬ:

БД MS TSQL (2005)

 Evernoob27 авг. 2009 г., 11:02
Вы хотите просто получить данные или обновить другое поле с ним?
 Darknight27 авг. 2009 г., 11:04
Просто получение, а также его MS TSQL

Ответы на вопрос(7)

Решение Вопроса

declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', ' 
from TableX where ModuleId = @ModuleId
 Darknight27 авг. 2009 г., 11:24
Это то, что я искал, работало просто отлично, большое спасибо!
 Darknight27 авг. 2009 г., 11:03
Спасибо! Я'Попробую сейчас, пометит вас как ответившего, если это сработает.
 suiwenfeng13 янв. 2016 г., 06:20
ВЫБРАТЬ ВЛЕВО (@ result, LEN (@result) -1) AS Txt

которую вы используете. MySQL, например, поддерживает (нестандартный)GROUP_CONCAT функция. Чтобы вы могли написать:

SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE [email protected]

Групповой конкат доступен не на всех серверах баз данных.

в отличие от большинства других ответов.

DECLARE @csv VARCHAR(1000)

SELECT @csv = COALESCE(@csv + ',', '') + ModuleValue
FROM Table_X
WHERE ModuleID = @ModuleID

(ЕслиModuleValue колонка нет уже строковый тип, то вам может потребоваться привести его кVARCHAR.)

 Darknight27 авг. 2009 г., 11:26
Хорошо известно, что в данном случае это был varchar, но в других случаях это может быть другой тип значения.

STRING_AGG( ... ) лучшее решение:

Больше на:

https://stackoverflow.com/a/42778050/1260488

 Jose Jet21 февр. 2019 г., 11:17
Это на самом деле peferct

В SQL Server 2005 и выше вы можете сделать что-то вроде этого:

SELECT 
    (SELECT ModuleValue + ','
     FROM dbo.Modules
     FOR XML PATH('')
    ) 
FROM dbo.Modules
WHERE ModuleID = 1

Это должно дать вам что-то вроде того, что выищу.

Марк

 yekanchi01 дек. 2018 г., 12:44
как убрать последнюю делимму, я имею ввиду там еще бесполезный, в конце
 Darknight27 авг. 2009 г., 11:23
кажется интересным, убежищеЯ много использовал путь XML. Я'Обязательно поиграю с этим. Спасибо!

," в конце. Я использовал функцию вещи, чтобы удалить лишнюю точку с запятой.

       SELECT STUFF((  SELECT ',' + ModuleValue AS ModuleValue
                           FROM ModuleValue WHERE [email protected]
                      FOR XML PATH('') 
                     ), 1, 1, '' )

SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE [email protected]

Я не уверен, какой диалект вы используете.

 starryknight6420 мар. 2017 г., 17:25
Связанный, так как это было полезно для меня:stackoverflow.com/questions/2567000/...

Ваш ответ на вопрос