我的表结构如下所示, “邮件” 列可以包含多个由逗号连接的电子邮件
数据(整数)
邮件(varchar(200))
[数据] [邮件]
1引用m1 @ gmail.com,m2 @ hotmail.com 2引用m2 @ hotmail.com,m3 @ test.com
1引用m1 @ gmail.com,m2 @ hotmail.com
2引用m2 @ hotmail.com,m3 @ test.com
&我需要生成如下的报告,对每封电子邮件的每一行进行计数
[邮件] 听听听听听听听听听听听听听听听听听 [COUNT]
m1@gmail.com的1 m2@hotmail.com听2 m3@test.com引用1
m1@gmail.com的1
m2@hotmail.com听2
m3@test.com引用1
那么将像上面那样生成的sql(server)查询将是什么?我也不能更改表结构。
仅使用CHARINDEX而不使用XML或CTE,字符串拆分更快。
样品表
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
您提供的唯一零件是