Select语句将联结表中的值从1个逗号分隔的字符串

时间:2016-11-20 18:57:35

标签: sql sql-server tsql

我有以下查询选择" CategoryName"来自我的Junction表和Category表。

SELECT CategoryName 
FROM BND_ListingJunction_testing j
JOIN BND_ListingCategories c ON c.CatID = j.Junc_CatID
WHERE j.Junc_LID = 3

在SQL中,这可以正常工作,并为LID在我的联结表中匹配的任何类别显示X行。

我的Web应用程序只是在创建令牌时才读取第一个结果。是否可以为X行提取结果集并将它们全部显示在以逗号分隔的1行中。

例如:如果LID = 1已经是类别5次,则上述查询将为我的联结表中存在的每个类别返回5行。

我想要一个看起来像这样的结果集(在一列中):

 Category1, Category2, Category3, Category4, Category5

而不是:

1   Category1
2   Category2
3   Category3
4   Category4
5   Category5

我再次以5为例,一个记录可以有1-X类别。

--- UPDATE

我尝试了以下似乎有效但不添加a的结果,在开头只有1个结果。

Declare @Cats as Nvarchar(max) = ','
Select @Cats = @Cats + CategoryName
From BND_ListingJunction_testing j
JOIN BND_ListingCategories c on c.CatID = j.Junc_CatID
Where j.Junc_LID = 3

Print(@Cats)

2 个答案:

答案 0 :(得分:0)

对于SQL Server,您可以使用XML PATH语句将多行转换为串行字符串聚合。

Postgres有一个'string_agg()'聚合函数,它更容易使用。

答案 1 :(得分:0)

这完成了我想要的结果。

SELECT CategoryName + ', ' AS [text()] 
FROM BND_ListingJunction_testing j
JOIN BND_ListingCategories c on c.CatID = j.Junc_CatID
WHERE Junc_LID=2
FOR XML PATH ('')