将几封电子邮件分组到一个联系人

时间:2014-01-30 19:21:27

标签: sql-server sql

我的SQL技能非常低,所以请注意我的问题的基本级别......

我有一个简单的数据库,其中有2个不同的列:CONTACTS和EMAILS

它看起来像这样:

 CONTACT    |  E-MAIL COLUMN
 contact01  |  EMAIL #1 - contact01
 contact13  |  EMAIL #3 - contact13
 contact285 |  EMAIL #67 - contact285
 contact999 |  EMAIL #87 - contact01

如何创建显示以下内容的2列(一个在另一列旁边):

NEWCONTACT  |  COMBO E-MAIL
contact01   |  EMAIL#1  /  EMAIL#87
contact13   |  E-MAIL#3
contact285  |  E-MAIL#67

注意:第二列上的“/”符号可以是您想要的任何内容。 我只需要一个分隔符(即“+”,“,”,“;”等等)

1 个答案:

答案 0 :(得分:0)

整个事情中最困难的部分是您按照电子邮件列的一部分进行分组。什么似乎是“真正的”接触。如果不是这种情况(如果你有另一个带有contact_id或类似内容的列)那么这可以简化很多。

WITH GroupingContact AS (
    SELECT Contact, SUBSTRING(eMail,1,charindex('-',eMail)-2) AS eMail,
            SUBSTRING(eMail,charindex('- ',eMail)+2,len(eMail)-charindex('- ',eMail)) 
                    AS GroupingContact
    FROM eMails)
SELECT MIN(Contact) AS Contact,
        STUFF((SELECT ', ' + GC.eMail
                FROM GroupingContact GC
                WHERE GroupingContact.GroupingContact = GC.GroupingContact
                FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)')
            , 1, 2, '') AS eMailList
FROM GroupingContact
GROUP BY GroupingContact