如何按行中的逗号划分列表进行分组?
情况: 我有一个视图,向我显示支持票据的信息。每张票都分配给无限数量的资源。它可能在资源列表中有一个名称,它可能有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
答案 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