我有一个查询,搜索几个表,并为其中一个查询表的一个特定列中的每个值返回一行。该表为一个唯一标识符返回多行。我想要做的是组合那些具有相同唯一标识符的行,并将列的值中的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 :(得分: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 :(得分:1)
根据this,您应该使用COALESCE
。
我首先将绘画和雕塑列合并为一个名为OneArt的列(在您的第一个查询中),然后在其上使用COALESCE和GROUP BY MuseumID。