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用逗号分隔[重复]

在sql server数据库中查询一个用逗号分隔的字段的问题

sql server 2005实现树形菜单显示的数据库表怎么设计?

列到行SQL

SQL Server 图像列到 html

SQL Server 2012将几个逗号分隔的值转换为表行/列