我目前有一个返回许多字段的SQL查询。我需要一个字段实际上是一个子查询子。
详细问题:
如果我有一个包含两列的表X,ModuleID并说ModuleValue,我如何编写SQL查询来获取结果并将其连接到一个字段中:
EG 从
返回的结果 (SELECT ModuleValue FROM Table_X WHERE ModuleID=@ModuleID)
价值1
价值2
价值3
...
我需要返回结果(作为单行,与上面不同):
值1,值2,值3
是否有一个简单的连接方法可以是用户?
修改
DB是MS TSQL(2005)
答案 0 :(得分:35)
与大多数其他答案不同,这个会自动排除尾随逗号。
DECLARE @csv VARCHAR(1000)
SELECT @csv = COALESCE(@csv + ',', '') + ModuleValue
FROM Table_X
WHERE ModuleID = @ModuleID
(如果ModuleValue
列不是字符串类型,则可能需要将其强制转换为VARCHAR
。)
答案 1 :(得分:30)
使用MSSQL,您可以执行以下操作:
declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', '
from TableX where ModuleId = @ModuleId
答案 2 :(得分:11)
在mysql中你可以使用以下函数:
SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE ModuleID=@ModuleID
我不确定你使用的是哪种方言。
答案 3 :(得分:9)
在SQL Server 2005及更高版本中,您可以执行以下操作:
SELECT
(SELECT ModuleValue + ','
FROM dbo.Modules
FOR XML PATH('')
)
FROM dbo.Modules
WHERE ModuleID = 1
这应该会给你一些你想要的东西。
马克
答案 4 :(得分:3)
这取决于您使用的数据库。例如,MySQL支持(非标准)group_concat函数。所以你可以写:
SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE ModuleID=@ModuleID
但是,所有数据库服务器都无法使用Group-concat。
答案 5 :(得分:3)
答案 6 :(得分:2)
Marc的小更新我们最后会有额外的“,”。我使用stuff函数来删除额外的分号。
SELECT STUFF(( SELECT ',' + ModuleValue AS ModuleValue
FROM ModuleValue WHERE ModuleID=@ModuleID
FOR XML PATH('')
), 1, 1, '' )