SQL Server 2012 列到单行,用逗号分隔
Posted
技术标签:
【中文标题】SQL Server 2012 列到单行,用逗号分隔【英文标题】:SQL Server 2012 Columns to Single Row Seperated by Comma 【发布时间】:2017-08-18 00:57:35 【问题描述】:我有一张带有 SortOrder 和 DiagnosisCodes 的表格。
对于每组不同的 SortOrder,我需要在一行中查看诊断代码。
【问题讨论】:
这是我第一次看到 ICD 码归一化 【参考方案1】:使用 FOR XML 路径
DECLARE @diagnosis TABLE (id INT, diagnosiscode VARCHAR(10))
INSERT INTO @diagnosis VALUES
(1,'D50.9'),
(1,'M10.9'),
(1,'Z79.82'),
(2,'M81.0'),
(2,'Z85.3'),
(2,'Z90.710'),
(3,'M81.0'),
(3,'Z85.3'),
(3,'Z17.0')
SELECT t.id,
STUFF(( SELECT ', ' + diagnosiscode
FROM @diagnosis
WHERE id = t.id
FOR XML PATH(''),TYPE)
.value('.','NVARCHAR(MAX)'),1,2,'') AS alldiagnosiscodes
FROM @diagnosis t
GROUP BY t.id
ORDER BY t.id
结果
id alldiagnosiscodes
1 D50.9, M10.9, Z79.82
2 M81.0, Z85.3, Z90.710
3 M81.0, Z85.3, Z17.0
【讨论】:
感谢提交!你能再解释一下吗?我看到了一些这样的答案,但我不明白它在做什么。 FOR XML PATH 允许您将查询结果输出为 XML 元素,通常类似于 > 但它是 ,(逗号)。 STUFF 将 1 到 2 的字符替换为空白 (1,2,'')。 播放示例。尝试用其他字符更改 ,(逗号),或者您可以使用 '' + diagnosticcode + '>' 看看会发生什么。 STUFF 会将 (1,2,'') 定义的前 2 个字符删除为空白,因此,您的结果开头将没有 ''。以上是关于SQL Server 2012 列到单行,用逗号分隔的主要内容,如果未能解决你的问题,请参考以下文章
在sql server数据库中查询一个用逗号分隔的字段的问题