SQL - 由逗号描述元素组成

时间:2015-06-11 14:55:32

标签: sql tsql sql-server-2012

如何按行中的逗号划分列表进行分组?

情况: 我有一个视图,向我显示支持票据的信息。每张票都分配给无限数量的资源。它可能在资源列表中有一个名称,它可能有5个。

我想按个人名称汇总,所以:

| Ticket ID | resource list
+-----------+----------
| 1         | Smith, Fred, Joe 
| 2         | Fred
| 3         | Smith, Joe
| 4         | Joe, Fred

会变成:

| Name      | # of Tickets
+-----------+----------
| Fred      | 3 
| Smith     | 2
| Joe       | 3

我没有设计数据库,因此我陷入了这个尴尬的资源列表列。

我尝试过这样的事情:

SELECT DISTINCT resource_list
        , Count(*) AS '# of Tickets'
FROM IEG.vServiceIEG
GROUP BY resource_list
ORDER BY '# of Tickets' DESC

...它根据特定的组合给出了票数,但是我无法将这一点进一步分离出来。

我也可以访问我可以加入的这些个人名单,但我不确定如何才能完成这项工作。以前在报告中,我使用过WHERE resource_list LIKE '%' + @tech + '%',但我不确定如何为所有名称迭代这个。

编辑:

这是我的最终查询,它给了我正在寻找的信息:

select b.Item, Count(*) AS 'Ticket Count'
from IEG.vServiceIEG a
cross apply (Select * from dbo.Split(REPLACE(a.resource_list, ' ', ''),',')) b
Group by b.Item
order by 2 desc

1 个答案:

答案 0 :(得分:1)

检查此帖子(Romil的函数定义),将字符串拆分为表格:

How to split string and insert values into table in SQL Server

以这种方式使用:

select b.Item, Count(*) from IEG.vServiceIEG a
cross apply (
 Select * from dbo.Split (a.resource_list,',')
   ) b
Group by b.Item
order by 2 desc