如果 count(values) > 1,则将所有值合并到一个单元格中

Llo*_*nks 5 sql t-sql sql-server ssms sql-server-2008

可能的重复:
SQL Server:我可以用逗号将多行分隔为一列吗?

如果记录数大于 1,我想将某个字段中的所有记录合并到一个单元格中(每个值来自另一列)。例如,如果我有以下代码

SELECT city, count(zoo name) AS 'count of zoo name' FROM mytable
Run Code Online (Sandbox Code Playgroud)

它将产生以下结果

在此处输入图片说明

原来的表是这样的

在此处输入图片说明

由于亚特兰大和纽约都有不止一个动物园,而东京只有一个动物园,所以最终的结果应该是这样的

在此处输入图片说明

我该怎么做呢?我考虑过使用 PIVOT 构造,但这会为每个可能的值创建新列。我还必须将每个可能的动物园名称的名称写入 PIVOT。这将是一种糟糕的形式,因为实际数据具有比上述更多的“动物园名称”可能值。

pra*_*een 2

您可以使用 XML Path 来连接列值

;With Cte(city,concat) as
(
    select city, (select a.Zoo+','
    from Sample a
    where a.city=b.city
    for XML PATH ('') )  concat
    from Sample b
    group by city
 )
Select city,left(concat, len(concat) -1) from cte
Run Code Online (Sandbox Code Playgroud)

在SQL Fiddle中检查结果