SQL,如何连接结果?

Dar*_*ght 32 sql sql-server sql-server-2005 concatenation sql-server-group-concat

我目前有一个返回许多字段的SQL查询.我需要一个字段实际上是一个子查询子.

问题详细:

如果我有一个包含两列的表X,ModuleID并说ModuleValue,我如何编写SQL查询来获取结果并将其连接到一个字段:

EG结果返回

 (SELECT ModuleValue FROM Table_X WHERE ModuleID=@ModuleID)
Run Code Online (Sandbox Code Playgroud)

价值1

价值2

价值3

...

我需要返回结果(作为单行,与上面不同):

值1,值2,值3

是否有一个简单的连接方法可以是用户?

编辑:

DB是MS TSQL(2005)

Luk*_*keH 35

与大多数其他答案不同,这个自动排除尾随逗号.

DECLARE @csv VARCHAR(1000)

SELECT @csv = COALESCE(@csv + ',', '') + ModuleValue
FROM Table_X
WHERE ModuleID = @ModuleID
Run Code Online (Sandbox Code Playgroud)

(如果该ModuleValue列不是字符串类型,则可能需要将其强制转换为VARCHAR.)


Blo*_*ard 33

使用MSSQL,您可以执行以下操作:

declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', ' 
from TableX where ModuleId = @ModuleId
Run Code Online (Sandbox Code Playgroud)

  • SELECT LEFT(@ result,LEN(@result)-1)AS Txt (4认同)

Sil*_*ann 11

在mysql中,您将使用以下函数:

SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE ModuleID=@ModuleID
Run Code Online (Sandbox Code Playgroud)

我不确定你使用的是哪种方言.


mar*_*c_s 9

在SQL Server 2005及更高版本中,您可以执行以下操作:

SELECT 
    (SELECT ModuleValue + ','
     FROM dbo.Modules
     FOR XML PATH('')
    ) 
FROM dbo.Modules
WHERE ModuleID = 1
Run Code Online (Sandbox Code Playgroud)

这应该会给你一些你想要的东西.


idr*_*sid 5

这取决于您使用的数据库。例如,MySQL 支持(非标准)group_concat函数。所以你可以写:

SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE ModuleID=@ModuleID
Run Code Online (Sandbox Code Playgroud)

但是,并非所有数据库服务器都提供 Group-concat。


san*_*wat 5

关于 Marc 的小更新,我们将在末尾添加额外的“,”。我使用 stuff 函数删除多余的分号。

       SELECT STUFF((  SELECT ',' + ModuleValue AS ModuleValue
                           FROM ModuleValue WHERE ModuleID=@ModuleID
                      FOR XML PATH('') 
                     ), 1, 1, '' )
Run Code Online (Sandbox Code Playgroud)


sds*_*c81 5

我认为,使用STRING_AGG( ... )是最好的解决方案:

更多信息:

/sf/answers/2994463531/