微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在逗号连接列上按SQL分组查询

如何解决在逗号连接列上按SQL分组查询

仅使用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

您提供的唯一零件是

  • :您的表名
  • :列名

解决方法

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

数据(整数)

邮件(varchar(200))

[数据] [邮件]


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

那么将像上面那样生成的sql(server)查询将是什么?我也不能更改表结构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。