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