Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 检索sql查询中匹配记录的逗号分隔值_Sql Server 2008 - Fatal编程技术网

Sql server 2008 检索sql查询中匹配记录的逗号分隔值

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,其分隔符为“”,则会给出您想要的结果。 如果您使用的是不同的数据库服务器,请检查它的文档,它可能会有类似的内容。

我有一个名为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,其分隔符为“”,则会给出您想要的结果。

如果您使用的是不同的数据库服务器,请检查它的文档,它可能会有类似的内容。请记住,有些数据库没有此功能

很抱歉,刚才看到您的帖子被标记为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