SQL:如何CONCAT值

时间:2014-03-19 20:36:03

标签: sql-server tsql

如何在下面的查询中返回MainEmail的值,用逗号分隔并仍然计算MDCselect?

declare @MainHospital varchar(50)='hospital 1'
    select distinct mainhospital , f.Item, count(*) Count
    from SurveyPicList s
    cross apply splitstrings(s.MDCselect,':') as f
    WHERE MainHospital = @MainHospital
    GROUP BY MainHospital, f.Item
    ORDER BY Count DESC

要明确上述内容,请返回:http://i.imgur.com/F1oPU6P.jpg

因此有3个单独的参赛作品/人选择" 02-Eye"。我想列出他们的电子邮件(MainEmail)逗号分隔。如果我不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

假设您使用CROSS APPLY表示您使用的是SQL Server,并且它至少是2005版本,​​您可以使用XML进行串联,如下所示:

declare @MainHospital varchar(50)='hospital 1';

select mainhospital , f.Item, count(*) Count
       ,Stuff(
           (select distinct ', ' + m.MainEmail
              from SurveyPicList m
             where m.MainHospital = @MainHospital
               and ':' + m.MDCselect + ':' like '%:' + f.Item + ':%'
            FOR XML PATH ('')),
           1, 2, '') as Emails
    from SurveyPicList s
    cross apply splitstrings(s.MDCselect,':') as f
    WHERE MainHospital = @MainHospital
    GROUP BY MainHospital, f.Item
    ORDER BY Count DESC

从名称我假设splitstrings将其第一个参数拆分为由第二个参数分隔的项目。因此,我使用like在子选择的f.Item条件中检查m.MDCselect中的WHERE。实际上,这个WHERE条件正在做的是收集同一个表的另一个实例中与最终分组输出中的一个记录匹配的所有行。