将结果转换为逗号分隔列表

Posted

技术标签:

【中文标题】将结果转换为逗号分隔列表【英文标题】:Turning results in comma separated list 【发布时间】:2015-01-27 16:31:02 【问题描述】:

我正在使用此代码得到以下结果:

Select  [Doc #], 
        [Production Number]
From    vwLiveDocuments
Where   [production number] IN
(
    SELECT  [production number]
    FROM    vwLiveDocuments
    where   [tags] LIKE N'%name of tag%'
    Group by [production number]
    Having Count (*) > 1
)

我会得到以下结果:

'Doc #'     'Production number'
117611      CGI00069441
47864       CGI00069441
47865       CGI00069457
117901      CGI00069457
47866       CGI00069460
117904      CGI00069460
121479      CGI00071490
53934       CGI00071490

您可以在生产编号中看到重复的结果。我想要的是转换这个列表以获得以下结果:

'Production number'     'Doc #'
CGI00069441             117611,47864
CGI00069457             47865,117901
CGI00069460             47866,117904
CGI00071490             121479,53934

对于每个重复的“产品编号”,我想获得一个以逗号分隔的重复文档列表。

【问题讨论】:

您使用的是哪个 RDBMS? 请在编辑问题时正确格式化您的代码... 【参考方案1】:

使用For xml path() 技巧来做到这一点。

;WITH cte
     AS (SELECT [Doc #],
                [Production Number]
         FROM   vwLiveDocuments
         WHERE  [production number] IN (SELECT [production number]
                                        FROM   vwLiveDocuments
                                        WHERE  [tags] LIKE N'%20150126-Appendix B%'
                                        GROUP  BY [production number]
                                        HAVING Count (*) > 1))
SELECT [Production number],
       Stuff((SELECT ',' + CONVERT(VARCHAR(10), [doc #])
              FROM   cte b
              WHERE  b.[Production number] = a.[Production number]
              FOR xml path('')), 1, 1, '') [Doc #]
FROM   cte a
GROUP  BY [Production number]
ORDER  BY [Production Number] ASC 

【讨论】:

太棒了.. 工作就像一个魅力.. 非常感谢,非常感谢。 抱歉,刚接触该网站。

以上是关于将结果转换为逗号分隔列表的主要内容,如果未能解决你的问题,请参考以下文章

将逗号分隔的字符串转换为列表

如何将逗号分隔的字符串转换为列表?

如何在oracle中将值列表转换为逗号分隔值

将对象的属性转换为逗号分隔的列表?

如何将逗号分隔的字符串转换为 Python 中的列表?

将长值列表转换为逗号分隔以及每个值周围的括号