Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 电子邮件表-合并到一个主题行并将其分组_Sql Server_Tsql - Fatal编程技术网

Sql server 电子邮件表-合并到一个主题行并将其分组

Sql server 电子邮件表-合并到一个主题行并将其分组,sql-server,tsql,Sql Server,Tsql,这是一个电子邮件表,我试图压缩行,如下面的所需格式:。有没有一种简单的方法可以将收件人/组折叠到同一主题行中 更多信息:不需要Group=-1和To=0根据您的示例数据,我们可以使用XML path()获得这些字段 @你发帖子的时候我在睡觉 Given: subject, To, Group ---------------------- subject1, name1, -1 subject2, name1, -1 subject2, name2, -1 subject2, 0, group1

这是一个电子邮件表,我试图压缩行,如下面的所需格式:。有没有一种简单的方法可以将收件人/组折叠到同一主题行中


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

根据您的示例数据,我们可以使用XML path()获得这些字段


@你发帖子的时候我在睡觉
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
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