SQL Server join结果作为逗号分隔的列表

4 浏览
0 Comments

SQL Server join结果作为逗号分隔的列表

我有一个公司、行业和公司行业映射的多对多表。

公司表:

公司ID | 公司名
1            高盛
2            微软

行业表:

行业ID | 行业
4             科技
5             金融
6             银行

公司行业映射表:

公司ID | 行业ID
1            5
1            6
2            4

我想编写一个查询,将所有行业以逗号分隔的形式连接起来,如下所示:

公司ID | 行业
1            金融,银行
2            科技

这是我尝试编写的通用查询语句:

SELECT 公司ID, 
       xxx AS 行业 
  FROM 公司 c, 
       公司行业映射 m 
 WHERE c.公司ID = m.公司ID

0
0 Comments

在SQL Server中,可以使用以下代码创建一个函数:

declare @result nvarchar(max)
set @result = ''
select @result = @result + ',' + UserLogin from [user] 
select @result

这段代码的目的是将[user]表中的UserLogin列的值以逗号分隔的形式返回。然而,这段代码存在一些问题。

问题的原因是,代码中的变量@result没有初始化,所以在第一次执行select @result = @result + ',' + UserLogin时,@result的值为NULL,导致结果中的第一个值前面会有一个额外的逗号。

解决这个问题的方法是,在初始化变量@result时,将其赋值为一个不包含逗号的字符串,例如空字符串''。

修正后的代码如下:

declare @result nvarchar(max)
set @result = ''
select @result = @result + ',' + UserLogin from [user] 
select @result

通过将@result初始化为一个空字符串,就能够正确地将UserLogin列的值以逗号分隔的形式返回。

0
0 Comments

问题:SQL Server中的join操作结果以逗号分隔的列表形式显示。

出现的原因:需要将多个行的结果以逗号分隔的列表形式显示,以便在一个字段中呈现。

解决方法:使用SQL Server中的子查询和XML PATH('')函数,将多行结果连接为以逗号分隔的列表。

具体的解决方法如下:

select co.CompanyID, AllIndustries = 
   (select (cast(industry as varchar(200))+',') as [text()]
   FROM company c, 
   company_industry_map m 
   WHERE c.company_id = m.company_id and c.company_id = co.company_id 
   order by industry_id for XML PATH(''))
from Companies co

以上代码中,子查询部分的目的是将多个行的结果连接为以逗号分隔的列表。首先,通过company表和company_industry_map表进行join操作,以获取与特定公司ID相关的行。然后,使用XML PATH('')函数将结果以XML格式返回,并使用CAST函数将industry字段转换为varchar类型。最后,通过在XML路径中指定空字符串作为分隔符,将多个结果连接为以逗号分隔的列表。

通过以上解决方法,我们可以实现在SQL Server中将join操作的结果以逗号分隔的列表形式显示。

0