5

重複の可能性:
SQL Server: 複数の行をカンマ区切りで 1 つの列にすることはできますか?

レコードの数が 1 を超える場合、特定のフィールドのすべてのレコードを (別の列の値ごとに) 1 つのセルに結合したいと思います。たとえば、次のコードがある場合

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

以下の結果が生成されます

ここに画像の説明を入力

元のテーブルはこんな感じ

ここに画像の説明を入力

アトランタとニューヨークには複数の動物園があり、東京には動物園が 1 つしかないため、最終結果は次のようになります。

ここに画像の説明を入力

どうすればこれを行うことができますか?PIVOT コンストラクトを使用することを考えましたが、可能な値ごとに新しい列が作成されます。また、考えられるすべての動物園名を PIVOT に書き込む必要があります。実際のデータには上記よりもはるかに多くの「動物園名」の値があるため、これは悪い形式です。

4

1 に答える 1

2

XML パスを使用して、列の値を連結できます

;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で結果を確認する

于 2012-08-09T19:41:36.427 に答える