通过SQL查询对逗号加入列进行分组

我的表结构如下所示,“邮件”列可以包含多个用逗号连接的电子邮件

数据(INT)

邮件(VARCHAR(200))

[Data] [Mail]

1 m1@gmail.com,m2@hotmail.com

2 m2@hotmail.com,m3@test.com

&安培;我需要生成如下所示的报告,计算每封电子邮件的每一行

[Mail] [Count]

m1@gmail.com 1

m2@hotmail.com 2

m3@test.com 1

那么生成如上所述的sql(服务器)查询是什么?我也无法改变表结构.

解决方法

仅使用没有XML或CTE的CHARINDEX,字符串拆分更快.

样本表

create table #tmp ([Data] int,[Mail] varchar(200))
insert #tmp SELECT 1,'m1@gmail.com,m2@hotmail.com,other,longer@test,fifth'
UNION ALL   SELECT 2,'m2@hotmail.com,m3@test.com'
UNION ALL   SELECT 3,'m3@single.com'
UNION ALL   SELECT 4,''
UNION ALL   SELECT 5,null

查询

select single,count(*) [Count]
from
(
    select ltrim(rtrim(substring(t.mail,v.number+1,isnull(nullif(charindex(',',t.mail,v.number+1),0)-v.number-1,200)))) single
    from #tmp t
    inner join master..spt_values v on v.type='p'
        and v.number <= len(t.Mail)
        and (substring(t.mail,v.number,1) = ',' or v.number=0)
) X
group by single

你提供的唯一部件是

> #tmp:你的桌名> #mail:列名

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...