3

私はいくつかのテーブルを検索し、クエリされたテーブルの1つの特定の列のすべての値に対して1つの行を返すクエリを持っています。このテーブルは、1つの一意の識別子に対して複数の行を返します。私がしたいのは、同じ一意の識別子を持つ行を結合し、列の値の2つをコンマで区切って結合し、それらの値を一意の列として返します。問合せ結果の行を一意の識別子で結合しますか?

例:

Museum  MuseumID  Country  City  Paintings  Sculptures 

Louvre  345   France  Paris Mona Lisa  NULL 
Louvre  345   France  Paris NULL   Venus De Milo 
Louvre  345   France  Paris Ship of Fools NULL 

代わりに私は、クエリがこれを実行したいと思います:

Museum  MuseumID  Country  City  Art 
Louvre  345   France  Paris Mona Lisa, Venus De Milo, Ship of Fools 

私はC#のプログラムで使用することができますストアドプロシージャには、このクエリを有効にする必要があります。最初はデータをそのまま使用し、C#を使用して配列とロジックを使用して行を結合しましたが、データをC#プログラムに並べ替えて結合する代わりに、これをストアドプロシージャにする必要がありました。私はしなければならない。私は助けが必要です。

誰でも助けてもらえますか?

+0

[グループ化された行を連結](http://stackoverflow.com/questions/9139472/concatenate-groupedrows) – Tony

答えて

3
DECLARE @a TABLE 
(
    Museum VARCHAR(32), 
    MuseumID INT, 
    Country VARCHAR(32), 
    City VARCHAR(32), 
    Paintings VARCHAR(32), 
    Sculptures VARCHAR(32) 
); 

INSERT @a VALUES 
('Louvre',345,'France','Paris', 'Mona Lisa',  NULL), 
('Louvre',345,'France','Paris', NULL,   'Venus De Milo'), 
('Louvre',345,'France','Paris', 'Ship of Fools', NULL); 


SELECT DISTINCT Museum, MuseumID, Country, City, 
    Art = STUFF((SELECT ', ' + COALESCE(Paintings, Sculptures, '') 
    FROM @a AS a2 
    WHERE a2.museum = a.museum AND a2.MuseumID = a.MuseumID 
    AND a2.Country = a.Country AND a2.City = a.City 
    FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 
    1,2,'') 
FROM @a AS a; 
1

thisによれば、COALESCEを使用する必要があります。

私は最初にPaintings and Sculpturesの列を(最初のクエリで)OneArtという名前の列に結合し、次にそれにCOALESCEとGROUP BY MuseumIDを使用します。

関連する問題