SQL多列子表查詢,及內容拆分成多行
阿新 • • 發佈:2019-01-01
//將查詢到的人員欄位,轉成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
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
where (userInfo.name='張三' and groupInfo.groupid=userInfo.groupid and groupInfo.lv = userInfo.lv))) as t2
on 1=1