我正在编写导出功能,我需要将联系人导出到Excel,并且遇到了技术难题-也许我的SQL技能的差距更接近事实了。;)
这是场景:我在数据库中有一堆联系人。每个联系人可以具有许多不同的角色,例如,一个联系人可以是C#开发人员和DBA,也可以是DBA和IT经理。它们分为三个表,如下所示:
------------------- ------------------- ------------------- * Contact * * ContactRole * * Role * ------------------- ------------------- ------------------- * ID * * ContactID * * ID * * Name * * RoleID * * Name * * Address * ------------------- ------------------- -------------------
不太难遵循。有一组联系人和一组角色。这些由相应ID上的ContactRole表连接。
导出联系人时,我需要在导出中有一个列,其中所有角色用逗号分隔,例如C# Developer, DBA或DBA, IT- manager。导出将通过背后的ASP.NET/C#代码完成,因此我认为可以在代码中完成此操作,但是我感觉可以在SQL中完成。
C# Developer, DBA
DBA, IT- manager
数据来自SQL Server 2005。
试试这个
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