当前位置: 首页 > 面试题库 >

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

缪英锐
2023-03-14
问题内容

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

数据(整数)

邮件(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)查询将是什么?我也不能更改表结构。


问题答案:

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

您提供的唯一零件是

  • #tmp :您的表名
  • #mail :列名


 类似资料:
  • 问题内容: 当我搜索“ new1”时,如何获取所有用户名。例如:我应该以tblC中的userid 1,2为A和B来获取具有new1的row1的1,2,应该使用什么查询来获得上述结果?非常感谢您的帮助。 http://sqlfiddle.com/#!2/1ab8e/2 到目前为止查询: 问题答案: 您应该真正看一下 数据库的规范化 ,首先通过添加一个联结表并保持来自tablec的关系来规范化您的结构

  • 问题内容: 我正在运行SQL Server,并且有一个存储过程。我想用WHERE IN子句做一条选择语句。我不知道列表会持续多久,所以我尝试了以下方法 在此解决方案中,@ idList是varChar(max)。但这是行不通的。我听说过要传递表值,但是我对如何做到这一点感到困惑。任何帮助都会很棒 问题答案: 我建议使用一个函数来拆分传入列表(使用Martin在其评论中放置的链接)。 将split函

  • 问题内容: 我有看起来像这样的数据: 对于每个customer_id,我需要用逗号分隔的列表,以指示该客户运营的月份: 等等。如何使用SQL Server 2005 SQL(而不是T-SQL)轻松生成此逗号分隔的列表? 我在Stack Overflow和其他地方在这里看到的大多数解决方案似乎都是基于联接多个行值而不是列值来创建逗号分隔的列表: T-SQL FOR XML路径(’‘) 关联的子查询与

  • 问题内容: 这是我的表结构: 我需要拆分该列,并希望通过一个简单的sql查询来做到这一点,因为我不知道如何使用函数,并且希望将其保持简单。 这是我已经发现的: 但这仅输出 有没有一种方法来拆分一切从到,,等? 提前致谢。 问题答案:

  • 问题内容: 有一个带有列的表,如:… 我有一个查询,例如: 这将按完整的分组,包括小时和分钟。我希望按日期分组,而不按日期分组。 有人知道怎么做吗?我仍然可以在我的代码中动态地执行此操作(因为我是atm),但是我正在清理垃圾代码,并且可以通过SQL来完成此操作,但我不知道如何:(。 问题答案: 将datetime强制转换为日期,然后使用以下语法将GROUP BY强制转换为: 或者,您可以按@ or

  • 问题内容: 我有3个表,分别为: 应用程序(ID,名称) 资源(ID,名称) ApplicationsResources(id,app_id,resource_id) 我想在GUI上显示所有资源名称的表。我想在每一行的一个单元格中列出该资源的所有应用程序(以逗号分隔)。 所以问题是,在SQL中执行此操作的最佳方法是什么,因为我需要获取所有资源,并且还需要获取每种资源的所有应用程序? 我是否先从资源