SQL合并列输出,以逗号分隔的值

问题描述 投票:0回答:2

根据以下结果,我想使用冒号将基于Work_WorkID的Committees_attendees组合在一起。

select  Distinct w.Work_WorkID,k.Name as  "Committees_Attendees"  from DTree d,WMap m,WSubWork s,WWork w,WFAttrData a,KUAF k
    where d.DataID=m.Map_MapObjID and m.Map_MapID=s.SubWork_MapID and s.SubWork_WorkID=w.Work_WorkID
    and w.Work_WorkID=a.WF_ID and d.DataID=35269818 and a.WF_AttrID=5 and k.ID=a.WF_ValInt

下面是上述查询的结果:

Work_WorkID Committees_Attendees
35273587    Deva
35273587    Eswar

以下是预期的输出:

 Work_WorkID    Committees_Attendees
    35273587    Deva ; Eswar

我尝试了如下所示的XML路径,但无法获得两列所需的输出。

SELECT DISTINCT e.results AS "Secretariat_Attendees" FROM
(
select REPLACE(STUFF(CAST((
                    SELECT   ' ; ' +CAST(c.Secretariat_Attendees AS VARCHAR(MAX)),c.WorkID
                    FROM (  
                            select Distinct w.Work_WorkID as WorkID,k.Name as Secretariat_Attendees  from DTree d,WMap m,WSubWork s,WWork w,WFAttrData a,KUAF k
                            where d.DataID=m.Map_MapObjID and m.Map_MapID=s.SubWork_MapID and s.SubWork_WorkID=w.Work_WorkID
                            and w.Work_WorkID=a.WF_ID and d.DataID=35269818 and a.WF_AttrID=17  and k.ID=a.WF_ValInt   
                        ) c order by c.WorkID
                    FOR XML PATH(''), TYPE) AS VARCHAR(MAX)), 1, 2, ''),' ','') AS results
                    from wfattrdata t) e;

结果:

Secretariat_Attendees
AdminCEOOffice<WorkID>35273587</WorkID>;Diana<WorkID>35273587</WorkID>
sql sql-server sql-server-2012
2个回答
0
投票

关于如何concat您的列。

select * into #res from (
    select '35273587' as Work_WorkID ,'Deva' Committees_Attendees
    union all
    select '35273587' ,'Eswar' 
)res


select distinct t2.Work_WorkID,
    stuff((select N' ; ' + Committees_Attendees
       from (select Work_WorkID, Committees_Attendees
          from #res t1 where t1.Work_WorkID = t2.Work_WorkID) AS t  
       for xml path('')
    ), 1, 2, '') + N''
from #res t2;
drop table #res

0
投票

如果您正在谈论Oracle SQL,则可以使用LISTAGG(列表聚合)。它是一个聚合函数,可以完成此操作(将列转换为字符分隔的字符串)。

尽管有最大接受值的预期限制;因此您可能无法连接一千列XD。

根据您的查询列出汇总:

SELECT "Work_WorkID", LISTAGG("Committees_Attendees", ' ; ') WITHIN GROUP (ORDER BY "Committees_Attendees") "Committees_Attendees" 
    FROM
    (SELECT DISTINCT W.WORK_WORKID "Work_WorkID", K.NAME AS "Committees_Attendees" 
        FROM DTREE D, WMAP M, WSUBWORK S, WWORK W, WFATTRDATA A, KUAF K
            WHERE D.DATAID = M.MAP_MAPOBJID AND M.MAP_MAPID = S.SUBWORK_MAPID AND S.SUBWORK_WORKID = W.WORK_WORKID
            AND W.WORK_WORKID = A.WF_ID AND D.DATAID = 35269818 AND A.WF_ATTRID = 5 AND K.ID = A.WF_VALINT)
        -- GROUP BY "Work_WorkID"

如果您的MySQL需要它,则可能要寻找GROUP_CONCAT。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.