Ответ 1
В MSSQL вы можете сделать что-то вроде этого:
declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', '
from TableX where ModuleId = @ModuleId
В настоящее время у меня есть SQL-запрос, который возвращает несколько полей. Мне нужно, чтобы поля были эффективно sub sub sub.
Проблема подробно:
Если у меня есть таблица X с двумя столбцами, ModuleID и сказать ModuleValue, как я могу написать SQL-запрос для получения результатов и объединить его в одно поле:
EG Результаты, возвращенные из
(SELECT ModuleValue FROM Table_X WHERE [email protected])
Значение 1
Значение 2
Значение 3
...
Мне нужно вернуть результат таким образом (как одна строка, в отличие от выше):
Значение 1, значение 2, значение 3
Есть ли простой метод Concatenation, который может быть пользователем?
EDIT:
DB - MS TSQL (2005)
В MSSQL вы можете сделать что-то вроде этого:
declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', '
from TableX where ModuleId = @ModuleId
Это автоматически исключает конечную запятую, в отличие от большинства других ответов.
DECLARE @csv VARCHAR(1000)
SELECT @csv = COALESCE(@csv + ',', '') + ModuleValue
FROM Table_X
WHERE ModuleID = @ModuleID
(Если столбец ModuleValue
уже не является строковым типом, вам может потребоваться передать его в VARCHAR
.)
В mysql вы используете следующую функцию:
SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE [email protected]
Я не уверен, какой диалект вы используете.
В SQL Server 2005 и выше вы можете сделать что-то вроде этого:
SELECT
(SELECT ModuleValue + ','
FROM dbo.Modules
FOR XML PATH('')
)
FROM dbo.Modules
WHERE ModuleID = 1
Это должно дать вам что-то вроде того, что вы ищете.
Марк
Это зависит от используемой вами базы данных. Например, MySQL поддерживает (нестандартную) функцию group_concat. Поэтому вы можете написать:
SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE [email protected]
Group-concat не доступен на всех серверах баз данных.
По-моему, использование STRING_AGG( ... )
- лучшее решение:
Дополнительно:
Небольшое обновление Marc у нас будет дополнительно "," в конце. я использовал функцию stuff для удаления дополнительной точки с запятой.
SELECT STUFF(( SELECT ',' + ModuleValue AS ModuleValue
FROM ModuleValue WHERE [email protected]
FOR XML PATH('')
), 1, 1, '' )