0
description_id       description
--------------      -------------
1                   Ampicillin Oral
1                   Ofloxacin Oral
1                   Sulfamoxole+Trimethoprim Oral
2                   Letrozole Oral
2                   Flunarizine Oral

table1 中的 description_id 和 table2 中的描述。

结果应该是

description_id       description
--------------       -----------
1                    Ampicillin Oral,Ofloxacin Oral, Sulfamoxole+Trimethoprim Oral
2                    Letrozole Oral, Flunarizine Oral
4

2 回答 2

2

我假设table2还有一description_id列,它是 dbo.table1 中的主键:

SELECT description_id, STUFF((SELECT N',' + description
  FROM dbo.table2 WHERE description_id = t1.description_id
  FOR XML PATH(''), TYPE(N'./text()[1]', N'nvarchar(max)'), 1, 1, N'')
FROM dbo.table1 AS t1;

在 SQL Server 2017 或更高版本中,这更加整洁:

SELECT t1.description_id, STRING_AGG(t2.description, N',')
  FROM dbo.table1 AS t1
  INNER JOIN dbo.table2 AS t2
  ON t1.description_id = t2.description_id
  GROUP BY t1.description_id;
于 2012-06-13T13:08:06.237 回答
1

我认为您正在寻找的是一个可以将描述字符串连接在一起的聚合函数。

然而,尽管 SQL Server 内置了聚合数字的函数(例如 SUM 和 AVERAGE),但没有内置聚合字符串连接函数。

这给您留下了两个主要选择:

  1. 在客户端上执行连接。
  2. 使用解决方法技术,例如 XML PATH、递归 CTE,或使用嵌入式公共语言运行时包。

对于选项 2,有一些关于如何执行此操作的文章,例如这篇关于连接行值的文章。确实 - 我刚刚看到 Aaron Bertrand 的回答,它向您展示了在您的情况下如何做到这一点:)

于 2012-06-13T13:13:58.100 回答