Подтвердить что ты не робот

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

В настоящее время у меня есть 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)

4b9b3361

Ответ 1

В MSSQL вы можете сделать что-то вроде этого:

declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', ' 
from TableX where ModuleId = @ModuleId

Ответ 2

Это автоматически исключает конечную запятую, в отличие от большинства других ответов.

DECLARE @csv VARCHAR(1000)

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

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

Ответ 3

В mysql вы используете следующую функцию:

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

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

Ответ 4

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

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

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

Марк

Ответ 5

Это зависит от используемой вами базы данных. Например, MySQL поддерживает (нестандартную) функцию group_concat. Поэтому вы можете написать:

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

Group-concat не доступен на всех серверах баз данных.

Ответ 6

По-моему, использование STRING_AGG( ... ) - лучшее решение:

Дополнительно:

fooobar.com/questions/979/...

Ответ 7

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

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