我有一个名为SerialNos的表,其中包含以下列: Id,Parent_Id,SerialNo
Parent_Id上有不同的SerialNo 喜欢:
Id Parent_Id SerialNo
1 16 abc
2 16 def
3 23 hij
4 23 klm
5 23 nop
我只想检索逗号分隔的SerialNos。特别是Parent_Id 例如如果Parent_Id传递16,则O / p应为:'abc,def' 如果Parent_Id传递23,则O / p应为:'hij,klm,nop'
答案 0 :(得分:1)
根据数据库服务器,您可以使用group_concat。例如,如果您使用mysql group_concat,分隔符为“,”将为您提供您所追求的结果。 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
如果您使用不同的数据库服务器检查其文档,它可能会有类似的东西。还请记住,某些数据库没有此功能。
抱歉,只是看到你的帖子被标记为sql-server2008。如果sql server 2008没有group_concat或类似的东西,请尝试此链接 http://blog.shlomoid.com/2008/11/emulating-mysqls-groupconcat-function.html
抱歉还有另一个编辑,这会有所帮助。 http://groupconcat.codeplex.com/
答案 1 :(得分:1)
对于sql-server 2008,您可以使用以下查询(使用您的表名):
select distinct STUFF(ISNULL((SELECT ', ' + x.SerialNo
FROM TableA x
WHERE x.Parent_Id= t.Parent_Id
GROUP BY x.SerialNo
FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '')
from TableA t
where Parent_Id = 16
答案 2 :(得分:1)
here是一个不错的黑客:
DECLARE @csv varchar(1000)
SELECT @csv = COALESCE(@csv+',','') + SerialNo
FROM SerialNos
WHERE Parent_Id = 23
SELECT @csv
答案 3 :(得分:1)
我可以建议我的博客here,但不幸的是它不是英文:)。 Here是类似的,只是没有CLR。 我知道至少有4种解决方案:
所以一个解决方案(不是最快,但很容易写):
Create Function fn_MyFunction
(
@Parent_Id int
)
Returns NVarChar(1000)
As
Begin
Declare @txt NVarChar(1000)
SELECT @txt = COALESCE(@txt + ';' + SerialNo, SerialNo)
FROM dbo.Table Where Parent_Id = @Parent_Id
Return @txt
End