3

我有一個查詢通過幾個表進行搜索,併爲其中一個查詢表的一個特定列中的每個值返回一行。該表爲一個唯一標識符返回多行。我想要做的就是將具有相同唯一標識符的行組合起來,併合並由逗號分隔的列值的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

[Concatenate grouped rows]的可能重複(http://stackoverflow.com/questions/9139472/concatenate-grouped-rows) – Tony 2012-02-27 22:06:16

回答

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

我首先將繪畫和雕塑列合併成一個名爲OneArt的列(在您的第一個查詢中),然後在其上使用COALESCE和GROUP BY MuseumID。