SELECT语句中的sql concat

SELECT语句中的sql concat,sql,sql-server,Sql,Sql Server,这个和这个差不多 但不完全如此。这是SQL 2008女士。我正在收集患者的人口统计数据,其中之一是种族,这是一个多选领域(你可以是亚洲人和中国人)。竞赛表“PatientTrace”由patientid链接到患者表。因此,表结构如下所示: Patient table PatientID PatientName PatientAddress PatientRace table PatientRaceID PatientID (FK) Description 我只想要一行,我想要种族被连接起来。

这个和这个差不多

但不完全如此。这是SQL 2008女士。我正在收集患者的人口统计数据,其中之一是种族,这是一个多选领域(你可以是亚洲人和中国人)。竞赛表“PatientTrace”由patientid链接到患者表。因此,表结构如下所示:

Patient table
PatientID
PatientName
PatientAddress

PatientRace table
PatientRaceID
PatientID (FK)
Description
我只想要一行,我想要种族被连接起来。可以在单个SELECT语句中执行此操作,还是需要使用游标?我设想光标是这样的:初始选择所有其他人口统计数据,插入临时表。由patientID检查临时表,然后为每个人拿出比赛、concat,并添加到临时表中

所需的输出如下:每个患者1行

姓名:“乔·布鲁”


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

你需要像这样使用东西和XML

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

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;

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

对不起,但“亚洲人,中国人”不是一个种族。一个问题。PatientTrace表中的描述代表什么?您应该向您的
患者
表中添加
RaceId
,并使用
Id
description
创建另一个表
Race
。在你的解决方案中,一场比赛将有大量的参赛者。@AndreDuarte我认为关键是一名患者可以参加多个比赛。将消旋体添加到患者体内将无法达到这一目的。然而,可能应该有一个
Race
表,并且
patientTrace
表应该作为
Race
Patient
之间的连接表,以规范关系请注意这一点,因为如果没有
类型
,XML实体化可能会带来难看的东西(在这种情况下是否会出现