SELECT语句中的sql concat
这与此类似。 How to concatenate all columns in a select with SQL ServerSELECT语句中的sql concat
但不完全。这是MS SQL 2008.我拉着病人的人口统计数据,其中之一是种族,这是一个多选题领域(例如,你可能是亚洲人和中国人)。比赛表'PatientRace'通过病人与病人表相关联。所以表结构是这样的:
Patient table
PatientID
PatientName
PatientAddress
PatientRace table
PatientRaceID
PatientID (FK)
Description
我只想要一行,我想要比赛连接。有可能在单个SELECT语句中执行此操作,还是需要执行游标?我设想游标是这样的:初始选择所有其他人口统计信息,插入临时表。通过patientID浏览临时表,然后分别获取比赛,concat,并添加到临时表中。
期望的输出是这样的:每个病人1行。
名称: “乔吹”
种族: “亚洲,中国”
串联字符串值不明显。它需要使用“XML”的数据处理和子查询:
select p.*,
stuff((select ', ' + Description
from patientrace pr
where pr.patientid = p.patientid
for xml path ('')
), 1, 2, ''
) as races
from patients p;
你需要使用的东西,FOR XML就像SQL Server的本
SELECT p.PatientName,
(STUFF(SELECT ',' + r.Description
FROM PatientRace r
WHERE r.PatientID = p.PatientID
FOR XML('')), 1, 1, '')
FROM Patients p
请注意这一点,因为如果没有'TYPE',你可能会遇到带有XML实体的丑陋东西(怀疑在这种情况下,字符串中会有像' 2014-10-27 20:28:21
至于我,你有一个像fn_GetRaceByID(INT PatientID),返回所需的字符串写入功能。所以在你的选择中使用它。在你的问题链接有很好的例子,如何做到这一点。
对不起,但是“亚洲华人”不是一场比赛。 – arkascha 2014-10-27 20:17:04
有一个问题。在PatientRace表格中代表什么意思? – AndreDuarte 2014-10-27 20:17:13
你应该为'Patient'表添加一个'RaceId',并且用'Id'和'Description'添加另一个表'Race'。在你的解决方案中,你将拥有大量的单项比赛参赛项目。 – AndreDuarte 2014-10-27 20:19:58