一尘不染

TSQL逗号分隔

sql

我正在编写导出功能,我需要将联系人导出到Excel,并且遇到了技术难题-也许我的SQL技能的差距更接近事实了。;)

这是场景:我在数据库中有一堆联系人。每个联系人可以具有许多不同的角色,例如,一个联系人可以是C#开发人员和DBA,也可以是DBA和IT经理。它们分为三个表,如下所示:

-------------------   -------------------   -------------------
*     Contact     *   *   ContactRole   *   *      Role       *
-------------------   -------------------   -------------------
* ID              *   * ContactID       *   * ID              *
* Name            *   * RoleID          *   * Name            *
* Address         *   -------------------   -------------------
-------------------

不太难遵循。有一组联系人和一组角色。这些由相应ID上的ContactRole表连接。

导出联系人时,我需要在导出中有一个列,其中所有角色用逗号分隔,例如C# Developer, DBADBA, IT- manager。导出将通过背后的ASP.NET/C#代码完成,因此我认为可以在代码中完成此操作,但是我感觉可以在SQL中完成。

数据来自SQL Server 2005。


阅读 147

收藏
2021-05-05

共1个答案

一尘不染

试试这个

declare @Roles nvarchar(max)

select @Roles = case when @Roles is null then '' else @Roles + ', ' end + Role.Name
from  Role
inner join ContactRole on Role.ID = ContactRole.RoleID
where ContactRole.ContactID = @ContactID

select @Roles

更新:

上面的代码涵盖了单个联系人的功能。您可以使用参数@ContactID创建标量函数,然后从

Select Name, dbo.GetContactRoles(ID) From Contact
2021-05-05