SELECT语句中的sql concat

时间:2014-10-27 20:15:11

标签: sql sql-server

这与此类似。 How to concatenate all columns in a select with SQL Server

但不完全。这是MS SQL 2008.我正在拉动患者人口统计学,其中一个是种族,这是一个多选领域(例如,你可以是亚洲人和中国人)。比赛表'PatientRace'通过patientid链接到患者台。因此,表结构是:

Patient table
PatientID
PatientName
PatientAddress

PatientRace table
PatientRaceID
PatientID (FK)
Description

我只想要一排,我希望将种族联系起来。是否可以在单个SELECT语句中执行此操作,还是需要执行游标?我设想光标是这样的:初始选择所有其他人口统计,插入临时表。通过patientID查看临时表,然后为每个临时表抓取比赛,连续并添加到临时表。

所需的输出如下:每位患者1排。

姓名:“Joe Blow”

种族:“亚洲人,中国人”

3 个答案:

答案 0 :(得分:5)

您需要像这样使用STUFF和FOR XML

SELECT p.PatientName,
      (STUFF(SELECT ',' + r.Description 
             FROM PatientRace r 
             WHERE r.PatientID = p.PatientID
             FOR XML('')), 1, 1, '')
FROM Patients p

答案 1 :(得分:2)

在SQL Server中连接字符串值并不明显。它需要使用" xml"数据处理和子查询:

select p.*,
       stuff((select ', ' + Description
              from patientrace pr
              where pr.patientid = p.patientid
              for xml path ('')
             ), 1, 2, ''
            ) as races
from patients p;

答案 2 :(得分:1)

至于我,你有写函数,如fn_GetRaceByID(int PatientID),它返回所需的字符串。所以在你的选择中使用它。你的问题中的链接有很好的例子,如何做到这一点。