根据以下结果,我想使用冒号将基于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>
关于如何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
如果您正在谈论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。
希望有帮助!