一尘不染

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

sql

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

SELECT city, count(zoo name) AS 'count of zoo name' FROM mytable

由于亚特兰大和纽约都有一个以上的动物园,东京只有一个动物园,因此最终结果应该像

我将如何去做呢?我考虑过使用PIVOT构造,但这会为每个可能的值创建新的列。我还必须将每个可能的动物园名称都写到PIVOT中。这将是一种不好的形式,因为实际数据中的“zoo name”值可能比上面的值多得多。


阅读 139

收藏
2021-05-30

共1个答案

一尘不染

您可以使用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

SQL
Fiddle中
检查结果

2021-05-30