电子邮件表 - 在一个主题行下合并到和组

时间:2015-07-17 18:26:35

标签: sql-server tsql

Given:
subject, To, Group
----------------------
subject1, name1, -1
subject2, name1, -1
subject2, name2, -1
subject2, 0, group1


Desired format:
Subject, To
-----------------
subject1, name1
subject2, name1, name2, group1

所以这是一个电子邮件表,我试图压缩下面的 Desired format:这样的行。有没有简单的方法将To / Group折叠到同一主题行?

更多信息:不需要Group = -1To = 0

的字段

1 个答案:

答案 0 :(得分:0)

基于您的示例数据,我们可以使用XML path()

来获取此数据
declare @t table(subject varchar(10),too varchar(10),groups varchar(10))
insert into @t (subject,too,groups)values
 ('subject1', 'name1', '-1'),
('subject2', 'name1', '-1'),
('subject2', 'name2', '-1'),
('subject2', '0', 'group1')

;with CTE AS (
select subject,STUFF((select distinct +','+too from @t 
    where subject = t.subject 
        for xml path('')),1,1,'')+
STUFF((select distinct +','+groups from @t
     where subject = t.subject 
        for xml path('')),1,1,'')R from @t t
GROUP BY subject )
select subject,
CASE WHEN CHARINDEX(',',R) > 0 
    THEN REPLACE(SUBSTRING(R, CHARINDEX(',', R) + 1, 20),'-1','')
         ELSE replace(R,'-1','') END [To] from CTE