我需要从子查询返回多个结果,并且无法弄清楚.最终结果将在垂直轴上产生人名,基于横轴上的动作类别的各种动作.所以最终结果如下:
----------
**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.
我为此任务使用用户定义函数.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)