【问题标题】: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?
  • 请在编辑问题时正确格式化您的代码...

标签: sql list comma


【解决方案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 

【讨论】:

  • 太棒了.. 工作就像一个魅力.. 非常感谢,非常感谢。
  • 抱歉,刚接触该网站。
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
相关资源
最近更新 更多