Sql server 2008 检索sql查询中匹配记录的逗号分隔值
我有一个名为SerialNos的表,其中包含以下列: Id,父\u Id,序列号 父\u Id上有不同的序列号 比如: 我只想检索逗号分隔的序列号。对于特定的父\u Id e、 g.如果父级Id超过16,则O/p应为:“abc,def”Sql server 2008 检索sql查询中匹配记录的逗号分隔值,sql-server-2008,Sql Server 2008,我有一个名为SerialNos的表,其中包含以下列: Id,父\u Id,序列号 父\u Id上有不同的序列号 比如: 我只想检索逗号分隔的序列号。对于特定的父\u Id e、 g.如果父级Id超过16,则O/p应为:“abc,def” 如果父级Id超过23,则O/p应为:“hij,klm,nop”,具体取决于您可以使用的数据库服务器。例如,如果您使用的是mysql组_concat,其分隔符为“”,则会给出您想要的结果。 如果您使用的是不同的数据库服务器,请检查它的文档,它可能会有类似的内容。
如果父级Id超过23,则O/p应为:“hij,klm,nop”,具体取决于您可以使用的数据库服务器。例如,如果您使用的是mysql组_concat,其分隔符为“”,则会给出您想要的结果。 如果您使用的是不同的数据库服务器,请检查它的文档,它可能会有类似的内容。请记住,有些数据库没有此功能 很抱歉,刚才看到您的帖子被标记为sql-server2008。如果sql server 2008没有组_concat或类似内容,请尝试此链接 抱歉,再次编辑,这将有所帮助。
对于sql server 2008,您可以使用以下查询(表名): 是一个不错的黑客:
DECLARE @csv varchar(1000)
SELECT @csv = COALESCE(@csv+',','') + SerialNo
FROM SerialNos
WHERE Parent_Id = 23
SELECT @csv
嗯,我可以建议我的博客文章,但不幸的是它不是用英语:)。 是类似的,只是没有CLR。 在那里,我知道至少有4种解决方案:
- CLR分组功能(嗯,是英文的)
- 可以使用光标(不是很快)
- 可以使用类似于游标的东西
- 可以使用XML
可能的重复-1回答一个已经被问过很多次的问题,我总是认为问问题的人是在问问题之前检查堆栈溢出的人的责任!1因为这个答案不符合应该投否决票的标准。“当你遇到一篇非常草率、不费力气的帖子,或者一个答案明显地、甚至可能是危险地不正确时,请使用你的反对票。”你添加的尾随逗号呢?
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
DECLARE @csv varchar(1000)
SELECT @csv = COALESCE(@csv+',','') + SerialNo
FROM SerialNos
WHERE Parent_Id = 23
SELECT @csv
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