1. 程式人生 > >SQL多列子表查詢,及內容拆分成多行

SQL多列子表查詢,及內容拆分成多行

//將查詢到的人員欄位,轉成xml,再用slq xml操作語句,按逗號分拆成多行,只有sql server才支援這樣做
SELECT    B.manage
FROM ( SELECT manage=CONVERT(XML , '<v>' + REPLACE(myInfo.manage , ',' , '</v><v>') + '</v>')
from (
select manage from groupInfo where other='張三'
union all
SELECT manage FROM groupInfo 
WHERE EXISTS (select groupid, lv from userInfo 
where (userInfo.name='張三' and groupInfo.groupid=userInfo.groupid and groupInfo.lv = userInfo.lv))
) as myInfo
) A

CROSS APPLY ( SELECT   manage= N.v.value('.' , 'varchar(100)')
FROM A.manage.nodes('/v') N ( v )
) B



//先查詢人員是否在特殊人員列,是的話直接返回對應上級領導,如果不在物殊人員列,照正情規則查詢
select isnull(t1.manage1,t2.manage2) as '上級領導' from
(select manage as manage1 from groupInfo where other='張三') as t1
full join
(SELECT manage as manage2 FROM groupInfo 
WHERE EXISTS
(select id from userInfo 
where (userInfo.name='張三' and groupInfo.groupid=userInfo.groupid and groupInfo.lv = userInfo.lv))) as t2
on 1=1