【发布时间】:2018-09-01 03:14:45
【问题描述】:
我正在编写一个语句,以根据其唯一 ID 值创建一个以逗号分隔的列值列表。某些 ID 具有多个电子邮件值。
我有一个ID, Email, Summary 列。
例如:
ID | Summary | Email
---+---------+----------------
1 | Hi | abc@gmail.com
1 | Hi | def@gmail.com
2 | good | xyz@gmail.com
浏览了一堆文章和堆栈溢出问题,我尝试了这个:
SELECT
STUFF((SELECT ', ' + cr.Email AS [text()]
FROM Table1 cr1
WHERE cr1.Email = cr.Email
FOR XML PATH('')), 1, 1, '') AS List
FROM
Table1 cr
GROUP BY
cr.Email
上述查询的问题在于,它向我显示了电子邮件,但它们都是重复的。例如:
ID | Summary | Email
---+---------+---------------------------------------------
1 | Hi | abc@gmail.com
1 | Hi | def@gmail.com, def@gmail.com, def@gmail.com
2 | good | xyz@gmail.com, xyz@gmail.com
所以我尝试了不同的方法,
DECLARE @tmp VARCHAR(250)
SET @tmp = ''
SELECT @tmp = @tmp + cr.Email + ', '
FROM Table1 cr
SELECT
SUBSTRING(@tmp, 0, LEN(@tmp))
上述查询的问题在于,它以逗号分隔的列表显示每封电子邮件。因此,具有唯一 ID 的每一行都包含
中的所有电子邮件ID | Summary | Email
---+---------+--------------------------------------------
1 | Hi | abc@gmail.com, def@gmail.com, xyz@gmail.com
2 | good | abc@gmail.com, def@gmail.com, xyz@gmail.com
解决方案我正在寻找应该返回此数据:
ID | Summary | Email
---+---------+------------------------------
1 | Hi | abc@gmail.com, def@gmail.com
2 | good | xyz@gmail.com
我可以做些什么来改进我的查询,还是我完全转向了错误的方向?
【问题讨论】:
-
是不是你一开始是按Email分组的问题?您应该按 ID 和摘要分组
标签: sql sql-server ssrs-2008