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)
Sil*_*ann 11
在mysql中,您将使用以下函数:
SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE ModuleID=@ModuleID
Run Code Online (Sandbox Code Playgroud)
我不确定你使用的是哪种方言.
在SQL Server 2005及更高版本中,您可以执行以下操作:
SELECT
(SELECT ModuleValue + ','
FROM dbo.Modules
FOR XML PATH('')
)
FROM dbo.Modules
WHERE ModuleID = 1
Run Code Online (Sandbox Code Playgroud)
这应该会给你一些你想要的东西.
渣
这取决于您使用的数据库。例如,MySQL 支持(非标准)group_concat函数。所以你可以写:
SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE ModuleID=@ModuleID
Run Code Online (Sandbox Code Playgroud)
但是,并非所有数据库服务器都提供 Group-concat。
关于 Marc 的小更新,我们将在末尾添加额外的“,”。我使用 stuff 函数删除多余的分号。
SELECT STUFF(( SELECT ',' + ModuleValue AS ModuleValue
FROM ModuleValue WHERE ModuleID=@ModuleID
FOR XML PATH('')
), 1, 1, '' )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93378 次 |
| 最近记录: |