有没有办法用子查询返回多个结果?

Rya*_*n H 6 sql t-sql

我需要从子查询返回多个结果,并且无法弄清楚.最终结果将在垂直轴上产生人名,基于横轴上的动作类别的各种动作.所以最终结果如下:

----------
**NAME            CATEGORY 1             CATEGORY 2**

Smith, John     Action 1, Action 2     Action 1, Action 2, Action 3


----------
Run Code Online (Sandbox Code Playgroud)

有没有办法在单个查询中执行此操作?

select
   name,
   (select action from actionitemtable where actioncategory = category1 and contact = contactid)
from
   contact c
   inner join actionitemtable a
     on c.contactid = a.contactid
Run Code Online (Sandbox Code Playgroud)

如果在该子查询中返回了多个结果,我希望能够将其显示为单个逗号分隔的字符串或操作列表等.

谢谢.

正在使用Microsoft Sql Server 2005.

May*_*ayo 9

我为此任务使用用户定义函数.udf创建一个带有与参数匹配的所有元素的分隔字符串,然后从select语句中调用udf,以便为记录集中的每个记录提取分隔列表.

CREATE FUNCTION dbo.ud_Concat(@actioncategory int, @contactid int)
RETURNS VARCHAR(8000)
AS
BEGIN
    DECLARE @sOutput VARCHAR(8000)
    SET @sOutput = ''

    SELECT @sOutput = COALESCE(@sOutput, '') + action + ', '
    FROM dbo.actionitemtable
    WHERE actioncategory=@actioncategory AND contact=@contact 
    ORDER BY action

    RETURN @sOutput
END

SELECT 
   name, 
   dbo.ud_Concat(category1, contactid) as contactList
FROM contact c
INNER JOIN actionitemtable a ON c.contactid = a.contactid
Run Code Online (Sandbox Code Playgroud)